java - 在java中存储大量的RSA加密数据

标签 java encryption cryptography rsa storing-data

在发布代码之前,我认为最好先布局一些内容。

目标:

对几个小数字执行非常基本的 RSA 加密。对于那些熟悉 RSA 加密的人,我已经发布了用于下面算法的值。

当前 RSA 数字/值:

P=29

Q=31

N=P*Q

Phi=((P-1)*(Q-1))

E=11

我的问题:

当我尝试解密我的代码时,问题就出现了。加密按设计工作。

代码:

long[] mesg = new long[]{8, 7, 26, 28};
long[] encrypted_mesg = new long[mesg.length];

for(int i=0; i<mesg.length; i++){
  encrypted_mesg[i]=(long)((Math.pow(mesg[i],E))%N);
  System.out.print(encrypted_mesg[i] + " ");
}
System.out.println();

//Decrpyt (not functioning-long to small, Big Integer not working)
for(int j=0; j<encryp_mesg.length; j++){
  BigInteger decrypt = new BigInteger(Math.pow(encryp_mesg[j],D) + "");
  System.out.print(decrypt.toString() + " ");
}

最初的问题是,D(私有(private)指数)在用作指数时,长期来说太大了。我快速进行了 Google 搜索,并决定尝试实现 BigInteger。当我运行该程序时,它抛出以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "Infinity"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)

at java.math.BigInteger.<init>(BigInteger.java:461)
at java.math.BigInteger.<init>(BigInteger.java:597)
at RSA_Riddles.main(RSA_Riddles.java:23)** 

我尝试解决该问题的方法:

说实话,我还没有尝试过任何东西,因为我知道答案不能计算到无穷大,但 BigInteger 认为它可以。无论如何,我可以存储一个数字,例如 130^611 吗?如果是这样,怎么办?

大问题:

如何存储执行解密所需的值?

提前感谢所有尝试帮助我的人!

最佳答案

出现问题是因为您正在使用原始数据类型进行计算,然后将这些原始数据存储在 BigInteger 中。这违背了使用 BigInteger 的目的。让我们看看有问题的行:

BigInteger decrypt = new BigInteger(Math.pow(encryp_mesg[j],D) + "");

当Java计算这一行时,它会首先采用这个表达式

Math.pow(encryp_mesg[j],D) + ""

并对其进行评估。然后它将计算结果传递给 BigInteger 的构造函数。然而,此时您已经超出了您正在使用的数据类型的范围。相反,您应该使用 BigIntegers 进行数学计算,如下所示:

BigInteger e = new BigInteger(Integer.toString(encryp_mesg[j]));
BigInteger decrypt  = e.pow(D);

现在,您仅使用 BigInteger 进行计算,并且仅将已存储在原始数据类型中的值存储在原始数据类型中。

关于java - 在java中存储大量的RSA加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536018/

相关文章:

java - 如何将自己的.class 添加到已编译的.jar 文件中?

java - FileUtils.readFileToString() 如何处理换行符?

ios - 如何将 NSData 对象中的 key 放入 Crypto++ 的 key/iv 数组中?

c - 向数组添加零填充

java - Java 中的反序列化

java - java中延迟后调用特定函数

java - 如何在java中使用ecdh key 通过对称 key 加密和解密?

javascript - 如何在xadesjs中签署文档?

java - 以函数式风格递归遍历对象链

c - hmac sha256 输出长度