base家族:base16、base32和base64,转码原理
来源:互联网 发布:ubuntu 14.04卸载内核 编辑:程序博客网 时间:2024/06/07 15:01
基本概念
ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式
base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式
base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式
base16就是用16(2的4次方)个字符,对二进制数据进行编码的方式
Base-64编码保证了二进制数据的安全
Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值。Base-64编码将用户输入或二进制数据,打包成一种安全格式,将其作为HTTP首部字段的值发送出去,而无须担心其中包含会破坏HTTP分析程序的冒号、换行符或二进制值。
Base-64编码是作为MIME多媒体电子邮件标准的一部分开发的,这样MIME就可以在不同的合法电子邮件网关之间传输富文本和任意的二进制数据里。Base-64编码与将二进制数据文本化表示的uuencode和BinHex标准在本质上类似,但空间效率更高。
索引表
base64索引表:
base32索引表:
base16索引表:
转码原理
转码
这里只介绍Base-64转码,其他的原理一样
Base-64编码将一个8位子节序列拆散为6位的片段,并为每6位分配一个字符(见索引表)。这64个字符都是很常见的,可以安全地放在HTTP首部字段中。这64个字符中包括大小写字母、数字、+和/,特殊字符=
示例:
上面的三个字符“Man”是原文,下面的四个字符“TWFu”是Base64编码后的字符
经过base64编码后,字符串理论上比之前长1/3,也就是原来的4/3。(除下面两种情况外)。
base64填充
base64编码收到一个8bit字节数据,将这个二进制序列每6bit划分一个块。二进制序列有时不能正好平均地分为6位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为24的倍数(6和8的最小公倍数)。
- 6bit里面的数据,全部是填充的,它显示的符号是第65个符号”=”。
- 6bit里面的数据,部分是填充的,按照索引表正常显示
示例:
输入字符串为”a:a”为3个字节(24位)。24是24的倍数,因此按照上面给出的例子计算。无需填充就会得到base64编码为”YTph”。
输入字符串变为”a:aa”为4个字节(32位)。要凑为24的倍数,最小的值是48。因此要添加16个填充码。
a:a -- 011000 010011 101001 100001 -- YTpha:aa -- 011000 010011 101001 100001 011000 01xxxx xxxxxx xxxxxx -- YTphYQ==a:aaa -- 011000 010011 101001 100001 011000 010110 0001xx xxxxxx -- YTphYWE=a:aaaa -- 011000 010011 101001 100001 011000 010110 000101 1000001 -- YTphYWFh
转码网站:http://tool.chinaz.com/tools/base64.aspx
参考:
base家族:base64、base32和base16这篇文章中介绍的概念有瑕疵
base64编码
让你完全理解base64是怎么回事
百度百科关于base64的转码是错误的,将8bit切分为6bit,不需要在高位补0
- base家族:base16、base32和base64,转码原理
- Base64 | Base32 | Base16编码和解码小结
- Base64 Base32 Base16全家桶
- python解base16,base32,base64全家桶
- python3.x中如何使用base64、base32、base16编码解码
- Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
- Python中的base64、base32实例
- Atitit 二进制数据字节转字符串 base64 base16 Quoted-printable BINHEX
- 如何用python解码base32/base64
- base32
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- CAP原理和BASE思想
- POJ 1375 求圆外一点引圆的切线
- Android 5.0(Lollipop)事件输入系统(Input System)
- 更新了Xcode, 报错:'system' is unavailable: not available on iOS
- Words from new tab in mac
- apk的包名到底是谁来决定(package和applicationId)
- base家族:base16、base32和base64,转码原理
- 把本地文件拖入chrome浏览器时不预览文件的解决方式
- GPUimageMovie 播放视频时间纠正
- Git 远程操作详解
- 7-116 修理牧场(25 分)
- Java序列化与反序列化
- Servlet的异常处理机制
- Dynamic CRM查自定义实体
- Servlet与JSP以及MVC设计模式