四时宝库

程序员的知识宝库

Base64的编码实现原理攻略(base64编码、解码)

  • Base64算法有编码和解码操作,可充当加密和解密的操作,还有一张字符映射表充当了密钥。
  • Base64算法公开,这与 柯克霍夫原则并无违背,但充当密钥的字符映射表公开,直接违反了 柯克霍夫原则
密码学上的柯克霍夫原则(Kerckhoffs's principle,也称为柯克霍夫假说、公理、或定律)系由奥古斯特·柯克霍夫在19世纪提出:即使密码系统的任何细节已为人悉知,只要密匙(key,又称密钥或秘钥)未泄漏,它也应是安全的。
  • Base64算法不能称为加密算法,但其变换法则遵从了单表置换算法。

2 Base64的索引表

Base64的索引表,我们可以理解为加密密文的构成,密文中的字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

3 编码表

简单点来说,一串明文经过一系列转换后,生成对应十进制数值,然后参照编码表,通过单表置换来通过编码字符来表示密文。

4 Base64 编码实现过程

通常以字符串使用 Base64 编码(加密),字符串是以字符构成,在编码过程中,以字符为基本单元,如下图中所示:

编码过程实现

  • 第一步: “M”、“a”、"n" 对应的ASCII码值分别为77,97,110,获取对应的二进制值 01001101、01100001、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个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。
  • 第四步 将获得的4个8位二进制码转换为十进制码,在上面的数据中,00010011、00010110、00000101、00101110 分别对应的十进制的值为:19、22、5、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用三个字节表示一个汉字。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接