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字符,转换表如下所示(最后两个字符的定义在不同的系统中有所不同):
那么如果原文的字节数不是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==”。
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性。
Base64要求把每三个8Bit的字节按照每6Bit一组的长度分割成四组(3*8 = 4*6 = 24),然后给每组6Bit的数据添加两位高位0,组成四个新的8Bit的字节。也就是说,转换后的字符串理论上将要比原来的长1/3。然后将新产生的四个8Bit字节根据转换表映射为ASCII字符,转换表如下所示(最后两个字符的定义在不同的系统中有所不同):
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
下面举一个例子
编码“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==”。
相关文章推荐
- iOS开发 svn .a文件丢失解决办法
- iOS开发的一些技巧
- iOS中3DES加密算法的原理
- ios静态库开发中的那些坑
- iOS 证书 设置指南
- IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
- iOS 用CocoaPods做iOS程序的依赖管理
- IOS绘图有锯齿的解决方案
- iOS 块的简单理解
- iOS开发~CocoaPods使用详细说明
- iOS_tip:本地化查找所有中文的快捷方法
- iOS中的时钟动画
- ios Foundation框架中的可变和不可变对象NSDictionary和NSMutableDictionary(三)
- ios Foundation框架中的可变和不可变对象(三)
- iOS应用自动检查更新提示方法
- iOS中怎么转为UTF-8
- ios多线程
- iOS加急审核之2015年总结
- iOS 控件阴影
- iOS 宏(define)与常量(const)的正确使用