Python中base64加密解密⽅法详解及版本间差异
今天来看⼀下base64加密函数的使⽤,以及Python2与Python3中的不同。
⼀、base64
Base64是⼀种基于64个可打印字符来表⽰⼆进制数据的表⽰⽅法。由于2的6次⽅等于64,所以每6个⽐特为⼀个单元,对应某个可打印字符。三个字节有24个⽐特,对应于4个Base64单元,即3个字节需要⽤4个可打印字符来表⽰。它可⽤来作为电⼦邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中⽽不同。编码后的数据⽐原始数据略长,为原来的4/3。
Base64常⽤于在通常处理⽂本数据的场合,表⽰、传输、存储⼀些⼆进制数据(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存储复杂数据.
在邮件中的⽤途:
在MIME格式的电⼦邮件中,base64可以⽤来将binary的字节序列数据编码成ASCII字符序列构成的⽂本。使⽤时,在传输编码⽅式中指定base64。使⽤的字符包括⼤⼩写字母各26个,加上10个数字,和加号“+”,斜杠“/”,⼀共64个字符,等号“=”⽤来作为后缀⽤途。
在URL中的⽤途:
标准的Base64并不适合直接放在URL⾥传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,⽽这些“%”号在存⼊数据库时还需要再进⾏转换,因为ANSI SQL中已将“%”号⽤作通配符。
为解决此问题,可采⽤⼀种⽤于URL的改进Base64编码,它不在末尾填充’='号,并将标准Base64中的“+”和“/”分别改成
了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统⼀了数据库、表单等处对象标识符的格式。
另有⼀种⽤于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”在正则表达式中都可能具有特殊含义。
⼆、python中使⽤
Python2 和 Python3 在base64处理上是不同的,Python3下传⼊的参数不能是Unicode字符串,需要进⾏转换
Python2:
Python 2.7.10(default, Oct 232015,19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0(clang-700.0.59.5)] on darwin
Type "help","copyright","credits"or"license"for more information.
>>>import base64
>>>str='pythontab'
>>> base64.b64encode(str)
'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode('cHl0aG9udGFiLmNvbQ==')
'pythontab'
>>>
Python3:
Python 3.5.2(default, Aug 242016,16:48:29)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0(clang-703.0.31)] on darwin
Type "help","copyright","credits"or"license"for more information.
>>>import base64
>>>str='pythontab'
>>> bytesStr =de(encoding='utf-8')
>>> bytesStr.decode()
'pythontab'
>>> b64str = base64.b64encode(bytesStr)
>>> b64str
b'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode(b64str)
b'pythontab'
>>>
注意:
⾸先要搞清楚,字符串在Python内部的表⽰是unicode编码.
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。
decode的作⽤是将其他编码的字符串转换成unicode编码,
如str1.decode(‘gb2312’),表⽰将gb2312编码的字符串转换成unicode编码。
encode的作⽤是将unicode编码转换成其他编码的字符串,
如de(‘gb2312’),表⽰将unicode编码的字符串转换成gb2312编码。
三、其他的⽅法
base64.b64encode(s[, altchars])
base64.b64decode(s[, altchars])
altchars为可选的参数,⽤来替换+和/的⼀个两个长度的字符串。
base64.urlsafe_b64encode(s)url编码处理
base64.urlsafe_b64decode(s)
此⽅法中⽤-代替了+,⽤_代替了/ ,这样可以保证编码后的字符串放在url⾥可以正常访问
base64.b32encode(s)
base64.b32decode(s[, casefold[, map01]])
base64.b16encode(s)
base64.b16decode(s[, casefold])
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论