我在使用Java编写RSA应用程序时遇到了问题。使用RSA加密长字符串(Java)
我必须从文件中读取字符串,对其进行加密,然后将加密的字符串保存到新文件中。
我的RSA密钥长度为1024位。
代码的部分是哪里的问题,如下:
readBytes = in.read(bytesToBeEncoded, 0, bytesToBeEncoded.length);
while(readBytes != -1){
encodedContent = ciph.update(bytesToBeEncoded, 0, readBytes);
out.write(encodedContent);
bytesToBeEncoded= new byte[(KEY_SIZE/8)-11];
readBytes = in.read(bytesToBeEncoded, 0, bytesToBeEncoded.length);
}
encodedContent = ciph.doFinal();
out.write(encodedContent);
其中变量是这样定义的:
byte[] bytesToBeEncoded = new byte[(KEY_SIZE/8)-11];
FileInputStream in = new FileInputStream(new File(file1));
FileOutputStream out = new FileOutputStream(new File(file2));
int readBytes;
的一点是,当我加密一个欠于─ 117个字节的字符串,它完美(加密和然后解密孔),但是当尺寸较大时,应用程序将引发此异常:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
通过抛出该异常:
encodedContent = ciph.doFinal();
我不知道问题出在哪里,我必须做的事情。
任何人都可以帮助我吗?谢谢。
对不起,我的英语。
你真的需要使用RSA加密你的数据吗?标准模式是使用RSA加密随机对称密钥,并使用该对称密钥加密实际数据。 – CodesInChaos 2012-03-11 16:33:44
您应该收听CodeInChaos,而不是使用RSA密钥直接加密数据。这是违反所有良好做法的。此外,您的缓冲区大小根本不应与输入大小相关。 – 2012-03-13 23:49:49