今後の 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進形式に正しく変換するのを手伝ってくれませんか?