知行编程网知行编程网  2022-12-14 07:00 知行编程网 隐藏边栏  6 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python常用模块之hashlib的相关知识,包括hash,以及hash算法举例这些编程知识,希望对大家有参考作用。



常用Python模块的hashlib



常用模块 - 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())


八、摘要算法应用

摘要算法能应用到什么地方?举个常用的例子:

任何允许用户登录的网站都会存储用户登录的用户名和密码,如何存储用户名和密码?方法是将其存储在数据库表中:

常用Python模块的hashlib

如果用户密码以明文形式保存,一旦数据库泄露,所有用户密码都会落入黑客手中。另外,网站运维人员可以访问数据库,即可以获得所有用户的密码。

正确的密码保存方式不是保存用户的明文密码,而是保存用户密码的摘要,如MD5:

常用Python模块的hashlib

当用户登录时,首先计算用户输入的明文密码的MD5,然后与数据库中存储的MD5进行比较。如果一致,说明密码输入正确;否则,密码输入错误。

存储MD5的好处是即使运维人员可以访问数据库,也无法知道用户的明文密码。

使用 MD5 存储密码安全吗?也许。假设你是黑客,拿到了存储MD5密码的数据库,如何通过MD5推导出用户的明文密码?暴力破解费时费力,真正的黑客是不会去做的。

考虑到这样的情况,很多用户喜欢使用“123456”、“888888”、“password”等简单的密码。因此,黑客可以提前计算出这些常用密码的MD5值 ,从而得到逆向推导表。这样,黑客只需要比对数据库的MD5,无需破解,黑客就可以使用普通密码获取用户账号信息。

对于用户来说,当然不要使用太简单的密码。但是,能否在程序设计中加强对简单密码的保护呢?

由于普通密码的MD5值容易被反推,所以最好保证存储的用户密码不是经过计算的普通密码的MD5。该方法是通过在原始密码基础上增加一个复杂的字符串来实现的。 ,俗称“加盐”。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享