python - Python中的MD5哈希
问题描述
我得到了一个包含用户名和密码的文件,格式为:$id$salt$hashed。
其中 ID 代表加密类型,id=1 代表 FreeBSD 风格的 MD5。
有一个例子,我知道密码=“爱丽丝”
jsmith: $1$kDHTx$WKRXXT1P7UtjvU7CQ9eWs/:10063:0:99999:7:::
所以我在Python中做了这个来检查
import hashlib
passw='alice'
salt='kDHTx'
hashed= hashlib.md5(salt+passw).hexdigest()
print('What i get is: '+hashed)
print('What i should: '+'WKRXXT1P7UtjvU7CQ9eWs')
但我什至没有正确获取格式:
What i get is: ba359e6dd36371c4dc5c187aac11e0d8
What i should: WKRXXT1P7UtjvU7CQ9eWs
我究竟做错了什么?甚至一开始就理解错了?
解决方案
您需要使用crypt
库而不是hashlib
.
>>> import crypt
>>> crypt.crypt('alice', crypt.METHOD_MD5)
$1$tlyP8ine$I9F3AiUCIgOjREqbx6WUg0
当你传入盐时,函数会生成盐crypt.METHOD_MD5
。
要重新创建现有哈希,您可以将其作为第二个参数传入:
>>> crypt.crypt('alice', '$1$kDHTx$WKRXXT1P7UtjvU7CQ9eWs/')
$1$kDHTx$WKRXXT1P7UtjvU7CQ9eWs/
推荐阅读
- python - 从R中API响应中的数据框列表返回列子集
- javascript - HTML 中的 Javascript 在 Airflow 功能中不起作用
- c++ - 当文件路径是变量而非硬编码字符串时,FT_New_Face 返回错误 1 (Cannot_Open_Resource)
- firebase - 电子邮件链接无密码登录:Web 浏览器上出现 400 API 密钥过期错误
- python - Pyspark 数据框列包含字典数组,希望将字典中的每个键变成一列
- c# - C# 无法通过 HttpResponseMessage 获取 HTTP 返回代码
- ios - 如何在 UIScrollView 中调用嵌入式 ViewControllers 生命周期 - Swift - 以编程方式
- librocket - 为什么 librocket 被放弃了,为什么 librocket/rmlui 没有被广泛使用?
- javascript - 空检查的表单验证在 asp.net 中无法正常工作
- kubernetes - kubernetes 在部署时将 configmap 分配为环境变量