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 23 2015, 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.com' >>> base64.b64encode(str) 'cHl0aG9udGFiLmNvbQ==' >>> base64.b64decode('cHl0aG9udGFiLmNvbQ==') 'pythontab.com' >>>
Python3:
Python 3.5.2 (default, Aug 24 2016, 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.com' >>> bytesStr = str.encode(encoding='utf-8') >>> bytesStr.decode() 'pythontab.com' >>> b64str = base64.b64encode(bytesStr) >>> b64str b'cHl0aG9udGFiLmNvbQ==' >>> base64.b64decode(b64str) b'pythontab.com' >>>
留意:
首先要搞清楚,字符串在Python内部的暗示是unicode编码.
因此,在做编码转换时,凡是需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的浸染是将其他编码的字符串转换成unicode编码,
如str1.decode('gb2312'),暗示将gb2312编码的字符串转换成unicode编码。
encode的浸染是将unicode编码转换成其他编码的字符串,
如str2.encode('gb2312'),暗示将unicode编码的字符串转换成gb2312编码。
三、其他的要领
base64.b64encode(s[, altchars])
base64.b64decode(s[, altchars])
altchars为可选的参数,用来替换+和/的一个两个长度的字符串。
base64.urlsafe_b64encode(s)
base64.urlsafe_b64decode(s)
此要领顶用-取代了+,用_取代了/ ,这样可以担保编码后的字符串放在url里可以正常会见
base64.b32encode(s)
base64.b32decode(s[, casefold[, map01]])
base64.b16encode(s)
base64.b16decode(s[, casefold])