【发布时间】:2021-06-29 21:45:19
【问题描述】:
我正在尝试使用 NodeJS 应用程序访问本地 XMPP 服务器 (Openfire)。
我想使用 DIGEST-MD5 机制(我知道它已被宣布为过时)。
我发现这篇文章解释了该机制的工作原理: https://wiki.xmpp.org/web/SASL_and_DIGEST-MD5
但是,在实现文章中描述的机制时,我计算的响应不正确。
我已尽力找出我做错了什么,但我似乎无法弄清楚。
我确信我的其余部分是正确的,只是响应不正确。
这是我计算响应的代码:
var x = username + ':' + realm + ':' + pswd;
var y = crypto.createHash('md5').update(x).digest();
var a1 = y + ':' + nonce + ':' + cnonce + ':' + authzid;
var a2 = 'AUTHENTICATE:' + digestUri;
var ha1 = crypto.createHash('md5').update(a1).digest("hex");
var ha2 = crypto.createHash('md5').update(a2).digest("hex");
var kd = ha1 + ':' + nonce + ':00000001:' + cnonce + ':auth:' + ha2;
var z = crypto.createHash('md5').update(kd).digest("hex");
其中 z 是最终响应。
如您所见,我正在使用加密库进行哈希处理。
上面文章中提到的例子如下:
username="rob",realm="cataclysm.cx",nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",nc=00000001,qop=auth,digesturi="xmpp/cataclysm.cx",response=d388dad90d4bbd760a152321f2143af7,charset=utf-8,authzid="rob@cataclysm.cx/myResource"
当我将所有这些值插入到我自己的实现中(密码为“秘密”)时,我计算出的响应是:
5093acf6b3bc5687231539507cc2fb20
而不是预期的 d388dad90d4bbd760a152321f2143af7。
其他例子也没有给我正确的结果。
那么,我到底做错了什么?
任何和所有的帮助将不胜感激!
【问题讨论】:
标签: node.js hash cryptography xmpp md5