2

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

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

我将一个文件读入一个字节[]

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();

然后从那个字节[]制作一个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[] 做些什么吗?

4

1 回答 1

2

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

于 2013-04-14T20:45:40.573 回答