,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢?

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。

那么Base64到底是怎样编码的呢?

简单来说,任何一个数据无非可以看作一个比特流,如01000100010011101100111010111100011001010......那么我们取6个比特为一组,计算它的ascii值,得到一个字符,这个字符肯定是可见字符,好,把它对应的字符写出来,再取6个比特,计算...,如此下去,直到最后,就完成了编码。

1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;

---------------------------------------------------------------------------------------------
提供一个工作中用到过的base64场景
一个xml当中包含另一个xml数据,此时如果将xml数据直接写入显然不合适,将xml进行适当编码存入较为方便,事实上xml当中的字符一般都是可见字符(0-127之间),但是由于中文的存在,可能存在不可见字符,直接将字符打印在外层xml的数据中显然不合理,那么怎么办呢?
可以使用base64进行编码,然后存入xml,解码反之
其实还有个办法,将byte的值写在xml当中,空格或者,分开,这样也可以将byte数据传入,不过这样更浪费空间,并且不易保存.

另一个,比如http协议当中的key value字段,必须进行URLEncode 不然出现的等号可能使解析失败 空格也会使http请求解析出现问题,比如 请求行就是以空格来划分的 POST /guowuxin/hehe HTTP/1.1

又比如有些文本协议不支持不可见字符的传递,只能用大于32的可见字符来传递信息(协议规定)

最新文章

  1. 使用Akka.net开发第一个分布式应用
  2. JS原生第一篇 (帅哥)
  3. JAVA-使用commos-fileupload实现文件上传与下载
  4. hihocoder #1058 Combination Lock
  5. MFC+Android模拟器 实现 自动玩“天天爱消除”
  6. 窗口移动--基类(BaseForm)
  7. ROS语音识别
  8. c++11信号量实现
  9. paramiko模块实现堡垒机
  10. linux性能优化
  11. Java中怎么控制线程訪问资源的数量
  12. D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法
  13. js内置函数大全及基本使用方法(一)
  14. XGoServer 一个基础性、模块完整且安全可靠的服务端框架
  15. angular之表达式
  16. js转base64(数字)
  17. day09内存管理
  18. 抖音分享和授权(iOS)
  19. 浅谈WPF的VisualBrush
  20. golang ffmpeg 做网络直播

热门文章

  1. Linux_FTP服务器
  2. tcp中的常见定时器
  3. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_3_练习_使用递归计算阶乘
  4. iview在项目中遇到的坑
  5. 【ABAP系列】SAP ABAP 生成随机数的函数
  6. DropDownList 需要加AutoPostBack="true" ,OnSelectedIndexChanged方法才有效
  7. [转]JavaScript构造函数及原型对象
  8. Redis数据类型:Hashes、Geo操作指令
  9. Maven父项目 以SpringBoot项目为例
  10. Javascript之谈对象