Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 算法),该算法接受传入的内容,经过运算得到一串hash值。
hash值的特点:
import hashlib m = hashlib.md5() # 创建md5对象 b = ‘hello‘.encode(encoding=‘utf-8‘) # 此处必须encode, 或者 b = bytes(str, encoding=‘utf-8‘),作用相同都是encode为bytes,将str默认的unicode转成utf-8. m.update(b); #该方法只接受bytes类型 print(m.hexdigest()) #将hash中的数据转换成数据,其中只包含十六进制的数字。 5d41402abc4b2a76b9719d911017c592 # 另一种写法:b‘’前缀代表的就是bytes ,对英文加密,才可以使用b‘ ‘前缀,b‘ ‘在python中只能对ASCII字符进行转码。 str_md5 = hashlib.md5(b‘this is a md5 test.‘).hexdigest() print(‘MD5加密后为 :‘ + str_md5)
为了防止密码被撞库,我们可以使用python中的另一个hmac 模块,它内部对我们创建key和内容做过某种处理后再加密。
如果要保证hmac模块最终结果一致,必须保证:
import hashlib import hmac # 注意hmac模块只接受二进制数据的加密 h1 = hmac.new(b‘hash‘, msg=None, digestmod=hashlib.md5) h1.update(b‘hello‘) h1.update(b‘world‘) print(h1.hexdigest()) # 905f549c5722b5850d602862c34a763e h2 = hmac.new(b‘hash‘, msg=None, digestmod=hashlib.md5) h2.update(b‘helloworld‘) print(h2.hexdigest()) # 905f549c5722b5850d602862c34a763e h3 = hmac.new(b‘hashhelloworld‘, msg=None, digestmod=hashlib.md5) print(h3.hexdigest()) # a7e524ade8ac5f7f33f3a39a8f63fd25
原文:https://www.cnblogs.com/springsnow/p/12558339.html