有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    ^{}总是在其^{}方法和^{}构造函数中使用一个符号位。所以第一个字节的最高有效位表示符号。如果有256*8位的无符号数据,且该数据中的最高有效位为1,则必须有额外的0字节来表示该数字是无符号的。删除该字节将导致它被解释为负数,结果如下所述