Я пытаюсь реализовать шифрование RSA в Java с большими целыми числами, когда, очевидно, модуль генерируется случайным образом из простых чисел q, p, каждые 128 байтов -1024 бита.
Моя проблема в том, что иногда модуль выходил из 257 байтов, где его первый байт равен 0, а второй всегда начинается с 1 (1**) ( звезда = любой 0 \1.) В других случаях это положительные 256 байтов, где первый байт начинается с 0.
Когда я отправляю в modPow модуль и показатель степени, я получаю:
java.lang.ArithmeticException: BigInteger: modulus not positive
даже если я попытался удалить первый 0 байт и остаться с 256 другими, я получаю эту проблему.
Пример кода:
BigInteger p = new BigInteger(1024,20,new Random());
BigInteger q = new BigInteger(1024,20,new Random());
//multiplying p & q and inserting it to modulus
ByteArray modulus = new ByteArray( p.multiply(q).toByteArray());
if (modulus.length()==257)
{
//if the first byte is 00 then erasing it
flag =false;
ByteArray temp = new ByteArray(TypeUtils.subArray(modulus.getByteArray(), 1, 256));
modulus = temp;
}
BigInteger modulusInBig = new BigInteger(TypeUtils.Byte2byte( modulus.getByteArray()) );
BigInteger answer = inTextInBig.modPow(exponentInBig, modulusInBig);