にデジタル署名 ( byte[] signedBytes
) がありbyte[] array
ます。これをBigInteger
( ) に変換し、結果の数値を何かに使用してからbigSignedBytes
に戻す必要があります。byte[] convertBackSignedBytes
BigInteger
byte[] signedBytes = rsa.sign();
BigInteger bigSigned = new BigInteger(signedBytes);
convertBackSignedBytes = bigSigned.toByteArray();
//signedBytes and convertBackSignedBytes differ.
問題は、元の変数とは異なるように見えBigInteger
ます。私は2の補数を返すことを知っています-これは責任がある可能性があります。byte[] convertBackSignedBytes
signedBytes
BigInteger.toByteArray()
byte[] value
BigInteger
では、2 の補数なしで元のバイトを取得するにはどうすればよいでしょうか。
誰かがこれを勧めました:
byte[] convertBackSignedBytes = bigIntegerValue.toByteArray();
if (convertBackSignedBytes[0] == 0) {
byte[] tmp = new byte[convertBackSignedBytes.length - 1];
System.arraycopy(convertBackSignedBytes, 1, tmp, 0, tmp.length);
convertBackSignedBytes = tmp;
}
試してみました - うまくいきませんでした。オリジナルとは異なる byte[]value を返しますsignedBytes
。
元の署名を検証しようとすると、成功します。
しかし、変換された署名を使用して検証しようとすると、失敗します。だからsignedBytes
とconvertBackSignedBytes
はもはや同じではありません。
簡単な指針を教えてください。