Base64 Base32 Base16全家桶

原文地址:http://www.iamstudy.cn/index.php/2015/05/02/505.html

1、base64:
它是用包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符来表示所有的ascii字符。
原理: 3个字符为一组(三组),将字符ascii编码以二进制表示出来(就有24比特),由于2的6次方等于64,所以每6个比特又重新为一个组(这时候为四组),然后将每一组又转化为10进制,然后根据索引表,实现了编码。
具体详情可见:http://zh.wikipedia.org/wiki/Base64

copy维基百科上面的一个例子:

举例来说,一段引用自托马斯·霍布斯《利维坦》的文句:

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

经过base64编码之后变成:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

编码“Man”

文本 M a n
ASCII编码 77 97 110
二进制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
索引 19 22 5 46
Base64编码 T W F u

在此例中,Base64算法将三个字符编码为4个字符

Base64索引表:

数值 字符   数值 字符   数值 字符   数值 字符
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 /

 

上面说的都是能被3整除的字符个数,当个数不能被3整除又该如何。

多出1个或2个字节,先在二进制那使用0字节值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个’=’号,代表补足的字节数。

文本(1 Byte) A    
二进制位 0 1 0 0 0 0 0 1                                
二进制位(补0) 0 1 0 0 0 0 0 1 0 0 0 0                        
Base64编码 Q Q    
文本(2 Byte) B C  
二进制位 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1     x x x x x x
二进制位(补0) 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 x x x x x x
Base64编码 Q k M  

所以大写的A的base64密文是  QQ==

2、base32/base16

当密文编码包含了很多混淆的字符,例如“1”、“I”和“l”,“0”和“O”或者“2”和“Z”,这样的…然后就出来了base32(这段是在 http://blog.csdn.net/mittermeyer/article/details/96950 看到的…)

base32

在base64中,64个字符用6个bit位就可以全部表示,一个字节有8个bit 位,剩下两个bit就浪费掉了,这样就不得不牺牲一部分空间了。这里需要弄明白的就是一个Base64字符是8个bit,但是有效部分只有右边的6个 bit,左边两个永远是0(引用于:http://www.cnblogs.com/chengxiaohui/articles/3951129.html)

因此可以理解到,base32中就是用5个bit位表示8bit位的256个ascii字符。取其中的最小公约数,则8个base32字符表示出5个ascii字符

前面的base64是4个base64字符可以表示出3个ascii字符

下面为base32的表(from:http://en.wikipedia.org/wiki/Base32 )

The   RFC 4648  Base 32 alphabet
Value Symbol   Value Symbol   Value Symbol   Value Symbol
0 A   9 J   18 S   27 3
1 B   10 K   19 T   28 4
2 C   11 L   20 U   29 5
3 D   12 M   21 V   30 6
4 E   13 N   22 W   31 7
5 F   14 O   23 X      
6 G   15 P   24 Y      
7 H   16 Q   25 Z      
8 I   17 R   26 2   pad =

base16也差不多,  4个base16字符表示出1个ascii字符。

3、base36

找资料搜到的,没认真看,应该原理差不多….

http://en.wikipedia.org/wiki/Base36

4、base解码

base64也可以加密一张图片,将图片的二进制转化为base64就ok。

在线base64转图片工具: http://www.iamstudy.cn/tools/base64Toimage.php

python标准模块里面base64,详情见

https://docs.python.org/2/library/base64.html

你可能感兴趣的:(加密,二进制,base64,编码,base32)