介绍
本篇文章给大家分享的是有关怎么在Python中使用内置的加密模块,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
数据加密:
- <李>
对称加密:数据加密和解密使用相同的密钥,主要解决数据的机密性(DES、AES)
李> <李>非对称加密(公匙加密):数据加密和解密使用的不同密钥,主要用于身份的验证(DSA, RSA)
李> <李>单向加密:只能加密不能解密,主要用于解决数据的完整性(MD5,沙系列算法)
李>Python内置加密模块:
hashlib主要提供了一些常见的单向加密算法(如MD5、沙等)hmac单,向加密算法,支持设置一个额外的密匙(盐)来提高安全性secretsPython3.6新增用于获取安全随机数<强> 1。hashlib模块强>
其中主要包含了MD5和SHA模块的功能,还提供了如MD5、SHA1, SHA224, SHA256, SHA384和SHA512(输出长度不同)等算法的函数实现
hashlib模块包含的函数与属性:
hashlib.new(名称(数据))用于构造指定的哈希算法所对应的哈希对象,名字可用于指定哈希算法的名称,如“MD5 # 39;‘SHA1 # 39;,不分大小写,数据为一个可选参数hashlib.algorithms_guaranteed它的值是一个该模块在所有平台都会支持的哈希算法的名称集合:设置((& # 39;SHA1 # 39; & # 39; sha224& # 39;, & # 39; sha384& # 39;, & # 39; sha256& # 39;, & # 39; sha512& # 39;, & # 39; MD5 # 39;]) hashlib.algorithms_available它的值是一个当前运行Python的解释器中可用的哈希算法的名称集合,algorithms_guaranteed将永远是它的子集哈希对象包含的方法与属性:
hash.update()更新哈希对象所要计算的数据,多次调用为累加效果,如m.update (a); m.update (b)等价于m.update (a + b) hash.digest()以二进制格式返回传递给更新()函数的所有数据的摘要信息(字符串)hash.hexdigest()以十六进制格式返回传递给更新()函数的所有数据的摘要信息(字符串)hash.copy()可用来有效计算共享一个初始子串的数据的摘要信息hash.digest_sizehash结果的字节大小,即hash.digest()方法返回结果的字符串长度,MD5:16, sha1:20, sha224:28hash.block_sizehash算法内部块的字节大小hash.name当前散列对象对应的哈希算法的标准名称(小写形式),可以直接传递hashlib.new()函数来创建另外一个同类型的哈希对象实例:
重要
import hashlib 时间=hash hashlib.md5 () 你好,hash.update (b # 39; & # 39;) hash.update (b # 39;世界! & # 39;) 时间=ret1 hash.digest(),,,,, #,以二进制格式返回数据的加密信息 print(类型(ret1), len (ret1), ret1) 时间=ret2 hash.hexdigest(),,,, #,以十六进制返回加密的数据值 print(类型(ret2), len (ret2), ret2)结果
& lt; class & # 39;字节# 39;祝辞,16,b, e \ xa8 \ xe2} \ x88y (81 \ xb6d \ xbd \ x8b \ x7f \ n \ xd4& # 39; & lt; class & # 39; str # 39;祝辞,32,65 a8e27d8879283831b664bd8b7f0ad4
注:只要输入的内容和加密模式相同,则输出的密匙就相同
<强> 2. hmac模块强>
实现了HAMC算法,与hashlib提供的API基本一致
HAMC模块提供的函数:
hamc.new(味精=None,关键digestmod=None)用于创建一个hmac对象,关键为密钥,味精为初始数据,digestmod为所使用的哈希算法,默认为hashlib.md5hmac.compare_digest (a, b)比较两个hmac对象,返回的是==b的值HAMC对象中提供的方法与属性与散列对象中一致
实例:
重要
import hmac 时间=h2 hmac.new (b # 39;是的,,,b # 39;一个# 39;,,digestmod=hashlib.sha224),,, #, digestmod 默认为MD5 h2.update (b # 39;你好# 39;) 时间=ret1 h2.digest(),, #,二进制 时间=ret2 h2.hexdigest(),, #,十六进制 print(类型(ret1), ret1) print(类型(ret2), ret2) 时间=h3 hmac.new (b # 39;是的,,,b # 39;名字# 39;),, 时间=ret3 h3.hexdigest () 时间=c hmac.compare_digest (ret2, ret3),,, #,比较同类型进制的值 打印(c)
结果
& lt; class & # 39;字节# 39;祝辞,b,, \ x9a \ xd0 {\ x15WTE9@ \ xd9 \ xe3z \ xfb + o \ \ \ xc5 \ x88 \ x7f \ x1c \ xa4Q \ xaf \ x0c \ n \ xa8E& # 39; & lt; class & # 39; str # 39;在269年ad07b155754453940d9e37afb2b5c6fc5887f1ca451af0c0aa845 假