Python中hmac.new与hashlib加密的区别
这两天碰到一个要求是:用户密码使用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