0

私は鍵を持っています:

byte: 0011100101010111000101111100101101100010100010111001010010000000

メッセージ:

byte: 10110001

16 進数での hmac 出力:

HMAC-SHA256:    ca3871e40207fc0cd66558e4e4fa2817d283da605c15e4c941ff7945ad4be29f

したがって、次のような新しい BigInteger (テスト) を作成すると:

BigInteger test = new BigInteger(hmac);

そして、次のように 16 進値を取得したい場合:

System.out.println("\noutput: " + test.toString(16));

私はこれを得る:

output: -35c78e1bfdf803f3299aa71b1b05d7e82d7c259fa3ea1b36be0086ba52b41d61

問題はどこだ?または、メッセージから hmac-sha256 を計算し、最初から BigIntegers を使用するにはどうすればよいですか。

key、message、および hmac はバイト配列です。

バイト「11010100」を BigInteger に変換しようとすると、負の「-101100」に変換されます なぜ BigInteger はそれを負に変換するのですか? 最初のビットは符号ビットですが、符号ビットを無効にするにはどうすればよいですか?

4

1 に答える 1

1

2 の補数のビット文字列を想定するデフォルトではなく、符号と大きさを個別に設定するための BigInteger コンストラクターがあります。ここを参照してください。

例:

Bmsg[i] = new BigInteger(1, msg[i]);
于 2013-06-26T11:02:24.027 に答える