RSA实现中的java处理大整数
我试图用大整数在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);
# 1 楼答案
^{} 总是在其^{} 方法和^{} 构造函数中使用一个符号位。所以第一个字节的最高有效位表示符号。如果有256*8位的无符号数据,且该数据中的最高有效位为1,则必须有额外的0字节来表示该数字是无符号的。删除该字节将导致它被解释为负数,结果如下所述