为什么要使用base64编码,有哪些情景需求?
公钥证书也好,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢?
我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。
而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,
由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。
所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
使用场景:
对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。 电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
比如http协议当中的key value字段的值,必须进行URLEncode ,
因为一些特殊符号(等号或者空格)是有特殊含义的,造成混淆,解析失败,那么需要把这些值统一处理为可见字符,传输完再解析回来。
xml格式的文件中如果想嵌入另一个xml文件。直接嵌入,那么各种标签(有两套xml标签)就混乱了,不容易被解析。怎么办?
1,把另一个xml编译成字节数组转换成逗号隔开的字符串。
2,编译成可见字符。
结果:2好些。因为1消耗的空间比原来多一倍,而2只是多三分之一。
网页中一些小图片可以直接以base64编码的方式嵌入。不用再用链接请求消耗资源。
很多比较老的协议还是只支持纯文本的,比如SMTP协议。
有时在一些特殊应用的场合,大多数消息是纯文本的,偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到base64
http虽然也是纯文本协议,但是http有针对二进制数据做特殊的规定(mime),所以用http直接传输二进制数据是可行的。
但是有些特殊情况,比如返回需要在json内部之类的。
为什么要使用base64编码,有哪些情景需求?的更多相关文章
- iOS base64编码 MD5 加密
//创建一个Base64编码的NSString对象 //字符串 转二进制 NSData *nsdata = [@"iOS Developer Tips encoded in Base64&q ...
- URL安全的Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...
- Base64编码
Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...
- Base64编码【转】
转http://www.cnblogs.com/luguo3000/p/3940197.html 开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际上Base64已经简单到不能 ...
- 【前端攻略】:玩转图片Base64编码
引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...
- 为什么要用base64编码
1.需求 了解为什么要使用base64对数据编码 2.理由 因为传输二进制数据的时候,网络中间的有些路由会把ascii码中的不可见字符删了,导致数据不一致.一般也会对url进行base64编码 Whe ...
- 图片Base64编码
我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...
随机推荐
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
- JS中的instanceof和typeof
原文链接:http://hi.baidu.com/pryzjvvpkkbhjyq/item/440fb91cda5cb90b8ebde43f typeof用以获取一个变量的类型 语法:typeof a ...
- Hibernate各种查询操作(一)
测试数据库如下 t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...
- Getting over the dangers of rm command in Linux---reference
reference:http://www.coolcoder.in/2014/01/getting-over-dangers-of-rm-command-in.html When we want to ...
- WEBPACK & BABEL 打包项目
本文首发于 BriFuture's Blog. 最近在用 Vue 重写之前的一个项目 Compass,这个项目以前是用 QML + JavaScript 在 Qt 平台上搭建的.这是我本科毕设时做的一 ...
- IT自由职业者的第一个月(上)——何去何从
2016年8月11号,我终于走完所有流程,拿到了离职证明,5年的嵌入式驱动开发工程师的职业生涯就此结束.走离职流程期间,陆续有同事和朋友问我,离职后去哪儿,我都是告诉他们:“还没想好,离了再 ...
- Nginx配置整理
不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...
- Hadoop 完全分布式部署(三节点)
用来测试,我在VMware下用Centos7搭起一个三节点的Hadoop完全分布式集群.其中NameNode和DataNode在同一台机器上,如果有条件建议大家把NameNode单独放在一台机器上,因 ...
- rpm的参数
rpm 包的参数如下: -e 卸载rpm包 -q 查询已安装的软件信息 -i 安装rpm包 -u 升级rpm包 --replacepkgs 重新安装rpm包 --justdb 升级数据库,不修改文 ...
- spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异
为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...