【发布时间】:2017-05-30 01:48:26
【问题描述】:
根据this question's related answer,我正在尝试组合一个类似于此 PHP 过程的打包/解包解决方案,但是在 Nodejs (Javascript) 中使用 md5 和 bufferpack
这里是 PHP 方法(改编自 DaloRADIUS:
$challenge = 'c731395aca5dcf45446c0ae83db5319e';
$uamsecret = 'secret';
$password = 'password';
$hexchal = pack ("H32", $challenge);
$newchal = pack ("H*", md5($hexchal . $uamsecret));
$response = md5("\0" . $password . $newchal);
$newpwd = pack("a32", $password);
$pappassword = implode ("", unpack("H32", ($newpwd ^ $newchal)));
echo "Response: ---> ", $response, "\n";
echo "New Password: ---> ", $newpwd, "\n";
echo "Pap Password: ---> ", $pappassword, "\n";
以上内容与这些相呼应:
以上明文:
Response: ---> 2d4bd27184f5eb032641137f728c6043
New Password: ---> password
Pap Password: ---> 356a1fb08f909fc400dfe448fc483ce3
在 Javascript 中,这是我现在正在做的事情:
var challenge = 'c731395aca5dcf45446c0ae83db5319e';
var uamsecret = 'secret';
var password = 'password';
var hexchal = pack.pack("H32", challenge);
var newchal = pack.pack("H*", md5(hexchal + uamsecret));
var response = md5("\0" + password + newchal);
var newpwd = pack.pack("a32", password);
var pappassword = pack.unpack("H32", (newpwd ^ newchal)).join("");
console.log("Response: --> ", response);
console.log("New Password: -->", newpwd);
console.log("Pap Password: --->", pappassword);
结果如下:
在 JSON 中:
明文:
Response: --> e8a54a55cbcd81dbc2bdfd9b197d62af
New Password: --> <Buffer >
Pap Password: ---> NaN
以上所有sn-ps都可以在这里找到:RadiusNES
我对整个过程的理解不是最好的,我会欣赏见解以及我哪里出错了。
为什么会出现不匹配?
【问题讨论】:
-
请尽可能尝试在问题正文中将纯文本作为格式化代码发布。对于某些人来说,这些屏幕截图可能非常难以阅读:它们依赖于屏幕阅读器或翻译工具。
-
@tadman 好的,很快就会更新。
-
这没什么大不了的,但是尝试通过输入长散列来重现您的结果对任何人来说都不是一件有趣的事情。我认为您需要更仔细地查看用于组合响应的前体组件,
hexchal和newchal,以确保它们在两边都相同。 -
@tadman 我已经更新了问题,并将仔细研究
hexchal和newchal -
首先检查那些的 MD5 值。我认为 PHP 可能会用 0 字节 (
NULL) 填充您的字符串,JavaScript 可能会截断。
标签: javascript php node.js