gpt4 book ai didi

java - 使用 BigInteger 在 Java 中手动实现 RSA

转载 作者:行者123 更新时间:2023-11-30 09:29:13 25 4
gpt4 key购买 nike

我正在尝试使用 BigInteger 在 Java 中实现文件的 RSA 加密和解密。

我有我的参数 p, q, e, n, d

我把一个文件读入byte[]

System.out.println("Opening file: " + infile);
File file = new File(infile);
FileInputStream fis = new FileInputStream(file);
int filelength = (int)file.length();
byte[] filecontent = new byte[filelength];
fis.read(filecontent);
fis.close();

然后从那个 byte[] 中生成一个 BigInteger

BigInteger plaintext = new BigInteger(filecontent);

那么加密就简单了

BigInteger ciphertext = plaintext.modPow(e, n);

然后我将密文写入一个新的加密文件

FileOutputStream fos = new FileOutputStream(outfile);
fos.write(ciphertext.toByteArray());
fos.close();

解密几乎是一样的

BigInteger plaintext = ciphertext.modPow(d, n);

当我第一次用一个小文本文件测试它时,它工作得很好。它加密和解密都很好。然而,当我开始使用其他一些文件(如 jpg 或 zip)进行测试时,一切都崩溃了。我无法查明调试问题,但我注意到有时从文件 byte[] 到 BigInteger 的转换会导致一个空的 BigInteger 对象。

在加密之前我必须对 byte[] 做些什么吗?

最佳答案

为了解决这个问题,你需要把文件分成chunk,这意味着例如将每256位作为一个部分并对其进行加密......,等等。

关于java - 使用 BigInteger 在 Java 中手动实现 RSA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com