Python base64模块是用来作base64编码解码的。
python2中:
import base64
str1 = u'我是一个字符串'
str2 = base64.b64encode(str1)
str3 = base64.b64decode(str2)
python3中:
base64.b64encode必须接收二进制数据
base64.b64decode得到的结果为二进制数据
import base64
str1 = '我是一个字符串'
str2 = base64.b64encode(str1.encode(encoding='utf8'))
str3 = base64.b64decode(str2).decode()
Python base64模块真正用的上的方法只有8个。
encode,decode
专门用来编码和解码文件的,也可以对StringIO里的数据做编解码;
encodestring,decodestring
专门用来编码和解码字符串;
b64encode和b64decode
用来编码和解码字符串,并且有一个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除
了英文字母和数字外还有三个字符 + / =, 其中=只是为了补全编码后的字符数为4的整数,而+和/在一些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。至于什么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。
urlsafe_b64encode和urlsafe_b64decode
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标 准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增 加,并统一了数据库、表单等处对象标识符的格式。
这个就是用来专门对url进行base64编解码的,实际上也是调用的前一组函数。
各种经过Base64加密后的下载软件地址
先以“迅雷下载”为例: 很多下载类网站都提供“迅雷下载”的链接,其地址通常是加密的迅雷专用下载地址。
如thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==
其实迅雷的“专用地址”也是用Base64加密的,其加密过程如下:
一、在地址的前后分别添加AA和ZZ
如www.baidu.com/img/sslm1_logo.gif变成
AAwww.baidu.com/img/sslm1_logo.gifZZ
二、对新的字符串进行Base64编码
如AAwww.baidu.com/img/sslm1_logo.gifZZ用Base64编码得到
QUF3d3cuYmFpZHUuY29tL2ltZy9zc2xtMV9sb2dvLmdpZlpa
三、在上面得到的字符串前加上“thunder://”就成了
thunder://QUF3d3cuYmFpZHUuY29tL2ltZy9zc2xtMV9sb2dvLmdpZlpa
另:
Flashget的与迅雷类似,只不过在第一步时加的“料”不同罢了,Flashget在地址前后加的“料”是[FLASHGET]
而QQ旋风的干脆不加料,直接就对地址进行Base64编码了