虽然经常听说“base64加解密”的说法,但是严格意义上来讲,base64对数据的吃力方式,数据安全性并不高,所以更多时候称之为编码解码更合适。
base64的原理:概括来说,就是用64个字符表示二进制数据。
所以这里说的64指什么:
从0开始,依次对字符进行编号: A-Z,a-z,0-9,+/(按照这个顺序从0开始编号),一共64个字符。
value-Encoding | value-Encoding | value-Encoding | value-Encoding |
---|---|---|---|
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 / |
(pad) = |
base64编解码原理:
编码原理核心就是将3个8位二进制转换为4个六位二进制,对于不足3*8=24的情况,需要自动补充为24个bits的整数倍;
解码原理刚好相反,需要从4个6位二进制,转换成3个8位二进制,再转换回到原始字符。
整个过程都是可逆的。
流程图:
举个例子:
准备加密数据:You:
查ASCII表知道对应ASCII值:089 111 117
换成二进制结果: 1011001 1101111 1110101
不够8位,补全(最高位补全):
01011001 01101111 01110101
拆分成6位:
010110 010110 111101 110101
高位补0:
00010110………………
转十进制计算:22 22 61 53
对应base64: WW91
编码结果使用=号补位,原文的字节最后不够3个的地方,转换Base64编码时用=号来代替。
python直接提供了base64的内部库,可以直接使用:
# 举个例子
import base64
print base64.b64encode("You")
print base64.b64decode("WW91")
# 输出结果
WW91
You
网友评论