您的位置:首页 > 移动开发 > IOS开发

iOS中Base64加密算法

2015-12-21 14:27 302 查看
Base64加密算法

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性。

Base64要求把每三个8Bit的字节按照每6Bit一组的长度分割成四组(3*8 = 4*6 = 24),然后给每组6Bit的数据添加两位高位0,组成四个新的8Bit的字节。也就是说,转换后的字符串理论上将要比原来的长1/3。然后将新产生的四个8Bit字节根据转换表映射为ASCII字符,转换表如下所示(最后两个字符的定义在不同的系统中有所不同):

索引对应字符索引对应字符索引对应字符索引对应字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/
那么如果原文的字节数不是3的倍数,即转换到最后部分时bit数不够6的倍数该怎么办呢?我们规定,当遇到这种情况,不足的bit位使用全0来补足,转换后需要在密文的末尾添加=号来标注。如果原文剩余1字节(即需要补足4位0),那么就在密文末尾添加两个=号,如果原文剩余2字节(即需要补足2位0),则添加一个=号,这就是为什么有些编码后的结果会以=号结束的原因。

下面举一个例子

编码“Man”

「M」的ASCII碼 = 77 = 01001101

「a」的 = 97 = 01100001

「n」的 = 110 = 01101110

将这三个字节拼合,得出一个24位的资料:

010011010110000101101110

现在六个一组的分开并补高位0,得到4个新的字节为:

00010011 00010110 00000101 00101110

对应的十进制值为:

19 22 5 46

对应的ASCII字符为

T W F u

所以“Man”经过Base64加密后的结果为“TWFu”。

解码同理,把 TWFu的二进制位分割,去掉高位0,重组后得到三个8位值,最后得出原码。

下面是一个原码字节数不是三的倍数的例子:

加密“M”

「M」的ASCII碼 = 77 = 01001101

位数不够6的倍数,补0后变为

010011010000

六个一组分开是

010011 010000,结果是TQ

在密文末尾加两个“=”,结果就是“TQ==”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: