我正在尝试将BigInteger数字转换为十六进制格式,以便我可以将其用于进一步的HMAC计算。 我使用以下帖子来获取代码来执行此操作。
Converting a 64 bit number string to word array using CryptoJS
代码对于正BigInteger数字非常适用,但在用于负BigInteger数字时不会产生正确的结果。
例如:考虑以下链接帖子中的代码:
function intToWords(num, lengthInBytes) {
var bigInt = new BigInteger();
bigInt.fromString(num, 10); // radix is 10
var hexNum = bigInt.toString(16); // radix is 16
if (lengthInBytes && lengthInBytes * 2 >= hexNum.length) {
hexNum = Array(lengthInBytes * 2 - hexNum.length + 1).join("0") + hexNum;
}
return CryptoJS.enc.Hex.parse(hexNum);
}
我将 num 值作为 -52 和 lengthInBytes 值传递为 8 。 生成的 hexNum (intToWords函数的第三行)是“ - 34”(而不是“ffffffffffffffcc”)
有人可以帮我正确地将输入数字转换为正确的十六进制格式吗?
答案 0 :(得分:0)
我想出了这个。该库正在返回正确的十六进制值。我只需得到2的十六进制补码(第3行)。