将负BigInteger(Tom Wu的JSBN库)值转换为十六进制值

时间:2015-08-10 19:21:45

标签: javascript biginteger jsbn

我正在尝试将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”

有人可以帮我正确地将输入数字转换为正确的十六进制格式吗?

1 个答案:

答案 0 :(得分:0)

我想出了这个。该库正在返回正确的十六进制值。我只需得到2的十六进制补码(第3行)。