问题:如何在 Java 中转换 BigInteger 以匹配 Botan BigInt 编码?
我使用 Botan 在 Java 和 C++ 应用程序之间进行通信。Botan 有一个 BigInt 类,与 BigInteger 相当。但是,在转换为字节数组时,编码会有所不同。
在 Botan 中,BigInt 编码如下:
void BigInt::binary_encode(uint8_t output[]) const
{
//bytes just returns the # of bytes, in my case its 32 always
const size_t sig_bytes = bytes();
for(size_t i = 0; i != sig_bytes; ++i)
output[sig_bytes-i-1] = byte_at(i);
}
在Java中,它的编码:
public byte[] toByteArray() {
int byteLen = bitLength()/8 + 1;
byte[] byteArray = new byte[byteLen];
for (int i=byteLen-1, bytesCopied=4, nextInt=0, intIndex=0; i >= 0; i--) {
if (bytesCopied == 4) {
nextInt = getInt(intIndex++);
bytesCopied = 1;
} else {
nextInt >>>= 8;
bytesCopied++;
}
byteArray[i] = (byte)nextInt;
}
return byteArray;
}