首页 > 解决方案 > 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

我究竟做错了什么?甚至一开始就理解错了?

标签: pythonhashcryptographymd5

解决方案


您需要使用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/

推荐阅读