将文本转换为BigInteger的RSA实现问题

时间:2014-12-17 13:55:06

标签: java encryption cryptography biginteger

我试图使用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,它们会匹配,但文件却没有。知道为什么吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

使用new BigInteger(1, data)。您正在生成负数,RSA仅使用正数。