我正在尝试使用大整数在 Java 中实现 RSA 加密,显然模数是从 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);