iOS中Base64加密算法

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 46

对应的ASCII字符为

u

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

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

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


加密“M”

「M」的ASCII碼 = 77 = 01001101

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

010011010000

六个一组分开是

010011 010000,结果是TQ

在密文末尾加两个“=”,结果就是“TQ==”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值