常用模块 - hashlib模块
一、简介
Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。
什么是摘要算法?摘要算法也称为散列算法或散列算法。它使用函数将任意长度的数据转换成固定长度的数据字符串(通常用十六进制字符串表示)。
比如你写一篇文章,内容是一个字符串“how to use python hashlib – by mayi”,附上这篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。如果有人篡改了你的文章并将其发布为“如何使用python hashlib - by bob”,你可以立即指定是bob篡改了你的文章,因为与“如何使用python hashlib - by bob”计算的摘要不同原始文章的摘要。
二、md5加密
import hashlib
hash = hashlib.md5()
hash.update("mayi".encode("utf-8"))
# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())
三、sha1加密
import hashlib
hash = hashlib.sha1()
hash.update("mayi".encode("utf-8"))
# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())
四、sha256加密
import hashlib
hash = hashlib.sha256()
hash.update("mayi".encode("utf-8"))
# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())
五、sha384加密
import hashlib
hash = hashlib.sha384()
hash.update("mayi".encode("utf-8"))
# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())
六、sha512加密
import hashlib
hash = hashlib.sha512()
hash.update("mayi".encode("utf-8"))
# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492
daac2b9c03a89defe
print(hash.hexdigest())
七、“加盐”加密
上述加密算法虽然强大,但仍然存在缺陷,可以通过鉴权来逆转。因此,需要在加密算法中加入自定义密钥,然后进行加密。
import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update("mayi".encode("utf-8"))
# b0758ad1aad20530044668775f389922
print(hash.hexdigest())
八、摘要算法应用
摘要算法能应用到什么地方?举个常用的例子:
任何允许用户登录的网站都会存储用户登录的用户名和密码,如何存储用户名和密码?方法是将其存储在数据库表中:
如果用户密码以明文形式保存,一旦数据库泄露,所有用户密码都会落入黑客手中。另外,网站运维人员可以访问数据库,即可以获得所有用户的密码。
正确的密码保存方式不是保存用户的明文密码,而是保存用户密码的摘要,如MD5:
当用户登录时,首先计算用户输入的明文密码的MD5,然后与数据库中存储的MD5进行比较。如果一致,说明密码输入正确;否则,密码输入错误。
存储MD5的好处是即使运维人员可以访问数据库,也无法知道用户的明文密码。
使用 MD5 存储密码安全吗?也许。假设你是黑客,拿到了存储MD5密码的数据库,如何通过MD5推导出用户的明文密码?暴力破解费时费力,真正的黑客是不会去做的。
考虑到这样的情况,很多用户喜欢使用“123456”、“888888”、“password”等简单的密码。因此,黑客可以提前计算出这些常用密码的MD5值 ,从而得到逆向推导表。这样,黑客只需要比对数据库的MD5,无需破解,黑客就可以使用普通密码获取用户账号信息。
对于用户来说,当然不要使用太简单的密码。但是,能否在程序设计中加强对简单密码的保护呢?
由于普通密码的MD5值容易被反推,所以最好保证存储的用户密码不是经过计算的普通密码的MD5。该方法是通过在原始密码基础上增加一个复杂的字符串来实现的。 ,俗称“加盐”。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python数据结构中使用集合?12/18
- ♥ 安装python3.5或3.612/21
- ♥ eclipse如何调用python09/16
- ♥ python如何读取yaml文件12/12
- ♥ pycharm如何配置python环境08/16
- ♥ 如何在python中的块中运行10/26
内容反馈