用Python实现MD5加密
用Python实现MD5加密时用到的是hashlib模块,可以通过hashlib标准库使用 多种Hash算法,如SHA1 、SHA224 、SHA256 、SHA384 、SHA512和MD5算法 等。下面是通过调用hashlib模块对字符串进行MD5加密的简单实例:
from hashlib import md5 def encrypt_md5(s) : new_md5 = md5() # 创建md5对象 new_md5 .update(s .encode(encoding= 'utf-8 ')) return new_md5 .hexdigest() if __name__ == '__main__ ' : print(encrypt_md5( 'ms08067 .com ')) |
运行结果: |
0961f18e7a720a53797aa038c9c643d1 |
通过在线工具验证,结果如图6-15所示。
图6-15 MD5在线加密的结果
虽然MD5为单向Hash加密,且不可逆,但根据鸽巢原理,MD5算法所产生的 32位输出所能够表示的空间大小为1632 ,即当样本大于1632时就会产生Hash碰
撞。由这一结论可知,我们可以生成大量密码样本的Hash ,得到密码和Hash值的
一一对应关系,然后根据这个对应关系反查,就可以得到Hash值所对应的密码。 在互联网应用方面,有相当多的用户使用弱密码,因此可以根据统计规律建立简 单密码所对应的MD5值表,从而得到使用简单密码的用户账户。
鉴于存在以上安全性问题,可以在用户密码被创建时生成一个随机字符串 (称之为Salt )与用户口令连接在一起,然后再用散列函数对这个字符串进行 MD5加密。如果Salt值的数目足够大,它实际上就消除了对常用口令采用的字典 式破解,因为攻击者不可能在数据库中存储那么多Salt和用户密码组合后的MD5 值。当然,更加安全的做法是,给每个密码设置一个随机的Salt值,这样即使通 过暴力枚举破解了一个用户的密码,也很难再破解其他用户的密码。