使用密码为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
我的问题的底线是我没有得到相同的哈希并需要帮助。任何建议都将不胜感激。
谢谢 罗马
答案 0 :(得分:0)
好吧,我找到了答案。 htpasswd使用“salt”,它存储在密码字符串的中间位:
$apr1$V.aqW878$JCj8ivmSnFp3BnTCtLAuN.
Salt: V.aqW878
node-pass module给了我正确的线索。见validate_md5
。它使用native openssl命令生成salted MD5哈希。
回想起来,这是有道理的,因为MD5不再安全了。这就是我多年来没有使用它并且在这里偏离轨道的原因。从本质上讲,标有$apr1$
的任何内容都应该这样对待。