一 .hashlib模块
1.对摘要算法的认识
(1).摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
(2).对于同一个字符串,不管这个字符串长度多长,只要相同的,无论在任何环境下多次执行,在任何语言中使用相同的算法,相同的手段得到的结果都是相同的,只要不是相同的字符串,得到的结果一定不同
2.摘要算法MD5
(1)hashlib.md5
(2)md5的计算速度很快,生成的是一个32位的十六进制字符.
(3)如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
md5
import hashlib a = hashlib.md5() a.update(a.encode("utf-8")) ret = a.hexdigest() print(ret)
(4)由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”
加盐 import hashlib a = hashlib.md5("123".encode("utf-8")) a.update("456789qwer".encode("utf-8")) ret = a.hexdigest() print(ret) 动态加盐 username = input('username : ') passwd = input('password : ') md5obj = hashlib.md5(username.encode('utf-8')) md5obj.update(passwd.encode('utf-8')) print(md5obj.hexdigest()) ee838c58e5bb3c9e687065edd0ec454f
3.摘要算法 sha1
(1)hashlib.sha1
(2)hashlib计算速度较慢,但是过程复杂,更安全. 生成的是一个40位的十六进制字符.
(3)如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
sha1
import hashlib a = hashlib.sha1() a.update("15234".encode("utf-8"))#1270f53049a7a5276019a7f931772c886fac6294 a.update("rewy".encode("utf-8")) ret = a.hexdigest() print(ret)