1

今後の HMAC 計算に使用できるように、BigInteger 数値を 16 進形式に変換しようとしています。これを行うためのコードを取得するために、次の投稿を使用しました。

CryptoJS を使用して 64 ビット数値文字列を単語配列に変換する

このコードは正の BigInteger Number に対しては問題なく動作しますが、負の BigInteger Number に対して使用すると正しい結果が得られません。

例:リンクされた投稿から以下のコードを考えてみましょう:

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 関数の 3 行目) は"-34"です ( "ffffffffffffffcc"ではなく)

誰かが入力数値を正しい16進形式に正しく変換するのを手伝ってくれませんか?

4

1 に答える 1

0

私はこれを理解しました。ライブラリは正しい 16 進値を返していました。16進数の2の補数を取得する必要がありました(3行目)。

于 2015-08-10T20:51:48.150 に答える