python hash加密,hash是加密算法吗
本文介绍Python中的加密和解密模块hashlib和hmac,通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
Python的hashlib提供了常用的总结算法,如MD5、SHA1等。
该算法也称为哈希算法和哈希算法。通过一个函数,它将任意长度的数据转换成固定长度的数据字符串(通常用十六进制字符串表示)。
MD5是最常见的总结算法,速度非常快。生成的结果是一个固定的128位字节,通常用32位十六进制字符串表示。
一、hashlib加密模块
Hash是一种算法(在Python3版本3。0,用hashlib模块代替md5模块和sha模块,主要提供SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法)。该算法接受传入的内容,并通过运算获得一系列哈希值。
哈希值的特征:
只要传入的内容相同,得到的哈希值相同,就可以用于非明文密码传输,密码校验无法通过哈希值分解成内容,即可以保证非明文密码的安全性。只要使用的哈希算法不变,无论检查的内容有多大,得到的哈希值长度都是固定的,可以用来哈希文本。MD5是最常见的汇总算法,速度非常快,生成的结果是固定的128位字节,通常用32位十六进制字符串表示。
导入hashlib
M=hashlib.md5() #创建一个md5对象
B=你好。encode (encoding= utf-8) #这里需要encode,或者b=bytes(str,encoding= utf-8 ),效果一样:encode是bytes,str的默认unicode转换成utf-8。
m .更新(b);#此方法只接受字节类型
Print(m.hexdigest()) #将哈希中的数据转换为只包含十六进制数字的数据。5d 41402 ABC 4b 2 a 76 b 9719d 911017 c 592
#另一种写法:B 前缀代表字节。如果加密英语,只能使用B 前缀。b 只能转换python中ASCII字符的代码。
str_md5=hashlib.md5(b 这是一个md5测试。).hexdigest()
Print(MD5已加密: str_md5 )
如果数据量很大,可以分块多次调用update(),最终计算结果是一样的。
SHA1的结果是160位字节,通常用40位十六进制字符串表示。
比SHA1更安全的算法是SHA256和SHA512,但是更安全的算法不仅速度更慢,而且摘要长度也更长。
二、hmac 加盐加密模块
Python自己的hmac模块实现了标准的Hmac算法:用于消息认证的键控散列法。通过标准算法,它在哈希计算期间将密钥混合到计算过程中。它在内部对我们经过某种处理后创建的密钥和内容进行加密。
与我们的自定义salt算法不同,Hmac算法对于所有哈希算法都是通用的,无论是MD5还是SHA-1。用Hmac代替我们自己的salt算法,可以让程序算法更规范,更安全。
让我们看看如何使用hmac实现带键散列。
首先,我们需要准备原始消息消息、随机密钥和要计算的哈希算法。这里采用MD5,使用hmac的代码如下:
导入hmac
message=b 你好,世界!
密钥=b“秘密”
h=hmac.new(密钥,消息,digestmod=MD5 )
#如果消息很长,可以多次调用h.update(msg)。
h . hex digest()# fa 4 ee 7d 173 F2 d 97 ee 79022 D1 a 7355 BCF
注意:注意传入的键和消息是字节,str类型需要先编码成字节。
def hmac_md5(密钥,s):
返回hmac.new(key.encode(utf-8 )、s.encode(utf-8 )、 MD5 )。hexdigest()
如果hmac模块的最终结果是一致的,必须确保:
HMA C。括号中指定的初始密钥是相同的。无论更新多少次,验证的内容加起来都是相同的内容导入hashlib。
导入hmac
#请注意,hmac模块只接受二进制数据的加密。
h1=hmac.new(bhash ,msg=None,digestmod=hashlib.md5)
h1.update(bhello )
h1.update(bworld )
print(h1 . hex digest())# 905 f 549 c 5722 b 5850d 602862 c 34 a 763 e
h2=hmac.new(bhash ,msg=None,digestmod=hashlib.md5)
h2.update(bhelloworld )
print(H2 . hex digest())# 905 f 549 c 5722 b 5850d 602862 c 34 a 763 e
h3=hmac.new(bhashhelloworld ,msg=None,digestmod=hashlib.md5)
print(H3 . hex digest())# a7e 524 ade 8 AC 5 f 7 f 33 F3 a 39 A8 f 63 FD 25
关于Python加密和解密的这篇文章到此为止。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。