舊代碼
public static void main(String[] args) {
SecureRandom random = new SecureRandom();
byte[] key = new byte[16];
random.nextBytes(key);
BigInteger bigInteger = new BigInteger(key);
System.out.println("old:" + Arrays.toString(key));
System.out.println(bigInteger);
System.out.println("new:" + Arrays.toString(bigInteger.toByteArray()));
}
雖然這段代碼可以進行正常轉換,但是BigInteger不是正數范圍,在密碼學計算中,都要求是正數
指定byte數組為正數BigInteger
BigInteger m = new BigInteger(1, bytesMessage);
正數BigInteger,會有符號位,去除第一個符號位0,還原得到原始數組
public static byte[] toByteArray(BigInteger bi) {
byte[] array = bi.toByteArray();
if (array[0] == 0) {
byte[] tmp = new byte[array.length - 1];
System.arraycopy(array, 1, tmp, 0, tmp.length);
array = tmp;
}