Base64的编码原理算法
更多可查看 点击这里了安全
本文将实现:编码
- 简述 ASCII码字符编码的Base64 编码实现原理
- 简述 非ASCII码字符编码的Base64 编码实现原理
加密分析系列文章:加密
- Base64 编码实现原理(就是本文了)
- Url Base64 编码算法实现原理(正在发文中)
- MD5 算法系列实现原理 (正在发文中)
- SHA 算法系列实现原理(正在发文中)
- MAC 算法系列实现原理(正在发文中)
- 对称加密 DES (正在发文中)
- 对称加密 AES(正在发文中)
- 基于口令加密 PBE(正在发文中)
- 非对称加密 DH(正在发文中)
- 非对称加密 RSA(正在发文中)
1 简述
- Base64算法有编码和解码操做,可充当加密和解密的操做,还有一张字符映射表充当了密钥。
- Base64算法公开,这与 柯克霍夫原则并没有违背,但充当密钥的字符映射表公开,直接违反了 柯克霍夫原则
密码学上的柯克霍夫原则(Kerckhoffs's principle,也称为柯克霍夫假说、公理、或定律)系由奥古斯特·柯克霍夫在19世纪提出:即便密码系统的任何细节已为人悉知,只要密匙(key,又称密钥或秘钥)未泄漏,它也应是安全的。
- Base64算法不能称为加密算法,但其变换法则听从了单表置换算法。
2 Base64的索引表
Base64的索引表,咱们能够理解为加密密文的构成,密文中的字符选用了"A-Z、a-z、0-九、+、/" 64个可打印字符,这是标准的Base64协议规定。在平常使用中咱们还会看到“=”或“==”号出如今Base64的编码结果中,“=”在此是做为填充字符出现.net
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
3 编码表
简单点来讲,一串明文通过一系列转换后,生成对应十进制数值,而后参照编码表,经过单表置换来经过编码字符来表示密文。
code
4 Base64 编码实现过程
一般以字符串使用 Base64 编码(加密),字符串是以字符构成,在编码过程当中,以字符为基本单元,以下图中所示:
blog
编码过程实现
- 第一步: “M”、“a”、"n" 对应的ASCII码值分别为77,97,110,获取对应的二进制值 0100110一、0110000一、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。
- 第二步:对得到的二进制码作分组转换操做,每3个8位二进制码为一组,转换为每4个6位二进制码为一组(不足6位时低位补0)如图红色框,将24位每6位二进制位一组分红四组,这是一个分组变化的过程,3个8位二进制码和4个6位二进制码的长度都是24位,
- 第三步: 对得到的4个6位的二进制码补位,向6位二进制码添加2位高位0,组成4个8位二进制码 ,添加2位高位0,组成4个8位二进制码,扩展成32个二进制位,此时变为四个字节:000100十一、000101十、0000010一、00101110。
- 第四步 将得到的4个8位二进制码转换为十进制码,在上面的数据中,000100十一、000101十、0000010一、00101110 分别对应的十进制的值为:1九、2二、五、46。 第五步:用上面得到到的十进制的值(Base64编码索引)在Base64编码表中进行查找,分别对应:T、W、F、u。所以“Man”Base64编码以后就变为:TWFu。
位数不足状况

5 非 ASCII码字符编码
ASCII 码能够表示十进制范围为 0-127的字符,对应二进制范围是 0000 0000 -0111 1111索引
ASCII 码包括阿拉伯数字、大小写英文字母和一些控制符,但却没有包含双字节编码的字符,如中文字符,所以有了 GB2312 、GBK、 UTF-8 等编码,GB2312 、GBK用2个字节表示一个汉字,UTF-8用三个字节表示一个汉字。图片
非 ASCII码字符编码 加密实现过程
咱们以字符串 “密” 为例ip
- 第一步 获取 字符串 “密” 对应的 utf-8 的编码为 -27,-81,-122
- 第二步 分别获取上述 utf-8 编码(-27,-81,-122)对应的二进制码:11100101 10101111 10000110
- 第三步 将上述二进制码分红4组6位 111001 011010 111110 000110
- 第四步 向6位二进制码添加2位高位0,组成4个8位二进制码,添加2位高位0,00111001 00011010 00111110 00000110
- 第五步 获取上述二进制码对应的十进制码 57 26 62 6
- 第六步 在Base64编码表中进行查找,分别对应 5 a + G
字符串 “密” 通过 Base64 编码后获得字符串 "5a+G"
6 分析
在这里 Base64(2的6次幂就是64)将字符转成的8位二进制码以6位为单位进行分组转换 表示字符,所以成为Base64。同理,Base32就是用5位分组,Base16就是用4位分组。
因此 Base32 、Base16编码过程也就一目了然了。