最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python中base加密解密操作方法及版本间差异

来源:动视网 责编:小采 时间:2020-11-27 14:23:10
文档

Python中base加密解密操作方法及版本间差异

Python中base加密解密操作方法及版本间差异:今天来看一下base加密函数的使用,以及Python2与Python3中的不同。一、baseBase是一种基于个可打印字符来表示二进制数据的表示方法。由于2的6次方等于,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base6
推荐度:
导读Python中base加密解密操作方法及版本间差异:今天来看一下base加密函数的使用,以及Python2与Python3中的不同。一、baseBase是一种基于个可打印字符来表示二进制数据的表示方法。由于2的6次方等于,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base6


今天来看一下base加密函数的使用,以及Python2与Python3中的不同。

一、base

Base是一种基于个可打印字符来表示二进制数据的表示方法。由于2的6次方等于,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。编码后的数据比原始数据略长,为原来的4/3。

Base常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存储复杂数据.

在邮件中的用途:

在MIME格式的电子邮件中,base可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共个字符,等号“=”用来作为后缀用途。

在URL中的用途:

标准的Base并不适合直接放在URL里传输,因为URL编码器会把标准Base中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base编码,它不在末尾填充'='号,并将标准Base中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

另有一种用于正则表达式的改进Base变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”在正则表达式中都可能具有特殊含义。

二、python中使用

Python2 和 Python3 在base处理上是不同的,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 base
>>> str = 'pythontab.com'
>>> base.bencode(str)
'cHl0aG9udGFiLmNvbQ=='
>>> base.bdecode('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 base
>>> str = 'pythontab.com'
>>> bytesStr = str.encode(encoding='utf-8')
>>> bytesStr.decode()
'pythontab.com'
>>> bstr = base.bencode(bytesStr)
>>> bstr
b'cHl0aG9udGFiLmNvbQ=='
>>> base.bdecode(bstr)
b'pythontab.com'
>>>

注意:

首先要搞清楚,字符串在Python内部的表示是unicode编码.

因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,

如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,

如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。

三、其他的方法

base.bencode(s[, altchars])

base.bdecode(s[, altchars])

altchars为可选的参数,用来替换+和/的一个两个长度的字符串。

base.urlsafe_bencode(s)

base.urlsafe_bdecode(s)

此方法中用-代替了+,用_代替了/ ,这样可以保证编码后的字符串放在url里可以正常访问

base.b32encode(s)

base.b32decode(s[, casefold[, map01]])

base.b16encode(s)

base.b16decode(s[, casefold])

文档

Python中base加密解密操作方法及版本间差异

Python中base加密解密操作方法及版本间差异:今天来看一下base加密函数的使用,以及Python2与Python3中的不同。一、baseBase是一种基于个可打印字符来表示二进制数据的表示方法。由于2的6次方等于,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base6
推荐度:
标签: 操作 加密 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top