Node.js MD5生成的结果与htpasswd -m不同

时间:2013-03-14 13:04:56

标签: node.js

使用密码为htpasswd -m -c file admin的{​​{1}}生成密码文件时,结果如下所示:

admin

当我尝试使用node.js对其进行身份验证时,结果会有所不同:

cat file  
admin:$apr1$V.aqW878$JCj8ivmSnFp3BnTCtLAuN.

我试过关注this existing StackOverflow solution

Digest Hex: 21232f297a57a5a743894a0e4a801fc3

所以结果仍然是错误的。

当我将摘要更改为new Buffer('21232f297a57a5a743894a0e4a801fc3').toString('base64'); MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM= 时,结果将是:

base64

我的问题的底线是我没有得到相同的哈希并需要帮助。任何建议都将不胜感激。

谢谢 罗马

1 个答案:

答案 0 :(得分:0)

好吧,我找到了答案。 htpasswd使用“salt”,它存储在密码字符串的中间位:

$apr1$V.aqW878$JCj8ivmSnFp3BnTCtLAuN.
Salt: V.aqW878

node-pass module给了我正确的线索。见validate_md5。它使用native openssl命令生成salted MD5哈希。

回想起来,这是有道理的,因为MD5不再安全了。这就是我多年来没有使用它并且在这里偏离轨道的原因。从本质上讲,标有$apr1$的任何内容都应该这样对待。