我有一个数字签名 ( 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.
问题是在从BigIntegerback to重新转换之后byte[] convertBackSignedBytes- 它似乎与我的原始signedBytes变量不同。我知道BigInteger.toByteArray()返回一个二进制补码byte[] value- 这可能是负责任的。
那么如何在BigInteger没有二进制补码的情况下获取原始字节呢?
有人推荐这个:
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;
}
试过了 - 没用。仍然从 original 返回不同的 byte[]value signedBytes。
如果我尝试验证原始签名 - 它会成功。
但是,如果我尝试使用转换后的签名进行验证 - 它会失败。所以signedBytes和convertBackSignedBytes不再一样。
请问有什么快速的指点吗?