Python中base64加密解密要领详解及版本间差别
当前位置:以往代写 > Python教程 >Python中base64加密解密要领详解及版本间差别
2019-06-14

Python中base64加密解密要领详解及版本间差别

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])

    关键字:

在线提交作业