我试图使用Java创建一个简单的RSA加密/解密程序。但是,加密和解密似乎不起作用。我认为问题是当我尝试将文件转换为bigInteger时。因为经过一些调试后,我发现加密和解密的“十进制表示”匹配,只是从bigInteger到文件的转换导致了问题。
这是我在文件中读到的内容:
File file = new File(inputPath);
FileInputStream fis = new FileInputStream(file);
int fileLen = (int)(file.length());
data = new byte[fileLen];
fis.read(data);
fis.close();
我试图将一个文件转换为大整数(m),然后我就完成其余的RSA(c = m.modPow(e,n))。
BigInteger m = new BigInteger(data);
对于解密,我读取文件并将其转换为bigInteger并使用m = c.modPow(d,n),并使用以下代码构建密码:
BigInteger c = new BigInteger(data);
在这两种情况下,我都按照以下方式编写BigInteger:
output = m.toByteArray(); or c.toByteArray();
fos = new FileOutputStream(path);
fos.write(output);
fos.close();
我知道RSA modPow和密钥生成有效,因为如果我将c和m打印为BigIntegers,它们会匹配,但文件却没有。知道为什么吗?非常感谢。
答案 0 :(得分:1)
使用new BigInteger(1, data)
。您正在生成负数,RSA仅使用正数。