Python的十六进制HMAC MD5与JavaScript密码不匹配

2 投票
1 回答
4872 浏览
提问于 2025-04-16 06:10

我有一个用JavaScript写的密码编码器。

md5 = hex_hmac_md5(secret, password)

我想在Python中实现这个功能,但我试过md5,结果不一样。

我在这个网站上找到了我的JavaScript md5代码:

Pajs Home

(md5.js)

网站上说的用法如下:

在很多使用哈希的场景中,你会想把一个密钥和一些数据结合起来。用简单的拼接来做这件事也可以,但HMAC是专门为这种用途设计的。用法是:

hash = hex_hmac_md5("key", "data");

HMAC的结果也可以以base-64编码或二进制字符串的形式获得,使用b64_hmac_*或str_hmac_*。

一些其他的哈希库参数顺序可能正好相反。如果JavaScript的HMAC结果和你服务器的库生成的值不匹配,可以尝试调换参数的顺序。

我试过一些Python代码,像这样:

> def md5_test(secret, password):
>     
>     return md5(secret+password).hexdigest()

有没有人能告诉我在Python中应该写什么代码才能得到相同的值?

谢谢!

1 个回答

7

这就是Python的hmac模块的用途,不要直接使用MD5函数。

# Right
import hmac
# Note that hmac.new defaults to using MD5
hmac.new("password", "message").hexdigest() # 'f37438341e3d22aa11b4b2e838120dcf'

# Wrong
from hashlib import md5
md5("message"+"password").hexdigest() # 'd0647ee3be62a57c9475541c378b1fac'
md5("password"+"message").hexdigest() # 'c494404d2dd827b05e27bd1f30a763d2'

还可以看看HMAC是怎么实现的(比如在维基百科上)。

撰写回答