にデジタル署名 ( byte[] signedBytes) がありbyte[] arrayます。これをBigInteger( ) に変換し、結果の数値を何かに使用してからbigSignedBytesに戻す必要があります。byte[] convertBackSignedBytesBigInteger
byte[] signedBytes = rsa.sign();
BigInteger bigSigned = new BigInteger(signedBytes);
convertBackSignedBytes = bigSigned.toByteArray();
//signedBytes and convertBackSignedBytes differ.
問題は、元の変数とは異なるように見えBigIntegerます。私は2の補数を返すことを知っています-これは責任がある可能性があります。byte[] convertBackSignedBytessignedBytesBigInteger.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はもはや同じではありません。
簡単な指針を教えてください。