base64模块加密

Zss 发表于:

在care的登陆过程中,通过抓包分析,使用的不是post请求,而是使用的get请求,账号和密码是附带在headers中的

而这串字符串是经过base64加密的,所以将其解密后就可以看到格式为   账号:密码的格式,这样子我就可以使用其他的账号来登陆了

import base64

s1 = base64.encodestring('care:superwifi')
s2 = base64.decodestring('Y2FyZTpzdXBlcndpZmk=')
print s1
print s2

输出:
Y2FyZTpzdXBlcndpZmk=
care:superwifi

通过抓包对比输出的加密的字符串确实一致

Python base64模块真正用的上的方法只有8个,分别是encode, decode, encodestring, decodestring, b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode。他们8个可以两两分为4组,encode,decode一组,专门用来编码和解码文件的,也可以对StringIO里的数据做编解码;encodestring,decodestring一组,专门用来编码和解码字符串; b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除 了英文字母和数字外还有三个字符 + / =, 其中=只是为了补全编码后的字符数为4的整数,而+和/在一些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。至于什么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。urlsafe_b64encode和urlsafe_b64decode 一组,这个就是用来专门对url进行base64编解码的,实际上也是调用的前一组函数。
Python base64模块加/解密例子:

import base64  
import StringIO  
a = "this is a test"
b = base64.encodestring(a) # 对字符串编码  
print b  
print base64.decodestring(b) # 对字符串解码  
c = StringIO.StringIO()  
c.write(a)  
d = StringIO.StringIO()  
e = StringIO.StringIO()  
c.seek(0)  
base64.encode(c, d) # 对StringIO内的数据进行编码  
print d.getvalue()  
d.seek(0)  
base64.decode(d, e) # 对StringIO内的数据进行解码  
print e.getvalue()  
a = "this is a +test"
b = base64.urlsafe_b64encode(a) # 进行url的字符串编码  
print b  
print base64.urlsafe_b64decode(b)

上面的encode函数和decode函数的参数也可以是文件对象:

f1 = open('aaa.txt', 'r')  
f2 = open('bbb.txt', 'w')  
base64.encode(f1, f2)  
f1.close()  
f2.close()

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’。

为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

Base64编码表

码值 字符 码值 字符 码值 字符 码值 字符 码值 字符 码值 字符 码值 字符 码值 字符
0 A 8 I 16 Q 24 Y 32 g 40 o 48 w 56 4
1 B 9 J 17 R 25 Z 33 h 41 p 49 x 57 5
2 C 10 K 18 S 26 a 34 i 42 q 50 y 58 6
3 D 11 L 19 T 27 b 35 j 43 r 51 z 59 7
4 E 12 M 20 U 28 c 36 k 44 s 52 0 60 8
5 F 13 N 21 V 29 d 37 l 45 t 53 1 61 9
6 G 14 O 22 W 30 e 38 m 46 u 54 2 62 +
7 H 15 P 23 X 31 f 39 n 47 v 55 3 63 /