python标准库之数据加密
python标准库中的hashlib模块提供了字符加密功能,包含MD5和SHA的加密算法,具体支持md5、sha1、sha224、sha256、sha384、sha512等算法。该模块在用户登录认证方面应用广泛,对文本加密也很常见。
一、基本调用方法
注意:向对象中传入字符串时,必须为编码类型。可以使用字符串前b’ ‘的方法或使用.encode(‘UTF-8’)的方法,使字符串变为bytes类型。
1 | import hashlib |
可以创建的加密算法有:md5、sha1、sha224、sha256、sha384、sha512
1 | import hashlib |
二、加”盐”方法
md5算法有如下特点:
- 压缩性:任意长度的数据,算出的MD5值的长度都是固定的。
- 容易计算:从原数据计算出的MD5值很容易。不管数据多大,很快就能算出一串MD5字符串来。
- 抗修改性:对原数据进行任何改动,哪怕修改任何一个字节,生成的MD5值也有会很大的区别。
- 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
既然MD5每次生成的值都是固定的,那么如果通过碰撞方法对字符串生成MD5后与MD5值碰撞,是不是就会得到MD5对应的字符串了呢?答对了!这样是可以的,换句话说,如果某用户数据库泄露了,拿到了密码库中的MD5就能通过碰撞的方法将密码破解出来。我们用一个小小的技巧,让这个碰撞方法失效,这个方法就是”加盐”。
“加盐”就是对原密码添加额外的字符串,然后再生成MD5值,这样就没有办法进行破解了,除非拿到”加盐”字符串。
1 | import hashlib |