我正在尝试使用 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[] 做些什么吗?