Python中hmac.new与hashlib加密的区别

2020-01-14  本文已影响0人  杨卫祥_老杨提醒

这两天碰到一个要求是:用户密码使用sha256做编码,保证服务器无法知道用户密码。也就是把密码使用sha256的方式加密。

以前自己经常用hmac.new(hmac_key, msg, hashlib.sha256)的方式来加密,这次无论如何也过不了了。

因为密码只有一个参数,我就把上述参数中的msg设为空,发现还是不行。

后来在网上搜索找到一种说用hashlib来加密,指定加密方式为sha256,这样用hashlib.sha256()就可以了。

于是就去试,看看能否通过验证,一试发现真的可以了。

后来就想了解下,这两个到底什么区别:

hashlib,hmac这两个都是Python中加密的函数,都是不可逆的加密,都是内置模块,直接导入即可使用.

hashlib模块实现了sha1,sha224,sha256,sha384,sha512,md5等算法,交易所的加密中一般使用sha256或md5

hmac模块需要一个msg来进行加密,hashlib并没有msg这个参数。

即使在hmac中把msg设为空,它仍旧会把这个空值进行hash运算,所以和hashlib算出来的结果也不一样,这就是问题所在。

也就是在使用中,如果有msg参数就使用hmac,否则使用hashlib就行了。

hmac.new(key, msg, hashlib.sha256)

hashlib.sha256(key)

我们看个简单的案例,把密码123456使用两种sha256做编码,看看结果是否一致

import hmac,hashlib

hashPassword = hmac.new(b'123456',msg=None,digestmod=hashlib.sha256).hexdigest()

print(hashPassword)

hashPassword2=hashlib.sha256(b'123456').hexdigest()

print(hashPassword2)

在python中运行会发现两者结果如下,是不一样的

b946ccc987465afcda7e45b1715219711a13518d1f1663b8c53b848cb0143441

8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

上一篇下一篇

猜你喜欢

热点阅读