我目前正在尝试使用Java JDK版本加密某些字符串是1.8.0。过程是这样的:
RSA-专用密钥(MD5Hash(原始字符串))
我正在使用Cipher和BC加密&添加填充。因为我想输出Cipher实例,并在另一个类中重新生成它。所以我使用CipherOutputStream输出加密的String以及密码实例。 在我指定以下代码之前,代码进展顺利。
public void outputCipherFile() throws IOException {
FileOutputStream fos = new FileOutputStream("output.txt");
CipherOutputStream cos = new CipherOutputStream(fos,cipher);
//this.encryptedString is the String I wish to encrypt, which datatype is byte[]
cos.write(this.encryptedString);
cos.close();
}
如果删除对outputCipherFile()的方法调用,则加密有效。但是当我执行上面的代码语句时,会出现以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineUpdate(Unknown Source)
at javax.crypto.Cipher.update(Cipher.java:1832)
at javax.crypto.CipherOutputStream.write(CipherOutputStream.java:158)
at javax.crypto.CipherOutputStream.write(CipherOutputStream.java:144)
at com.domain.JavaEncryptionProject.outputCipherFile(JavaEncryptionProject.java:132)<5 internal calls>
我在网上发现一些关于RSA的参考资料太短,无法加密字符串。但是我不太明白为什么它在加密和解密中起作用,在使用CipherOutputStram输出txt时失败。请帮忙。
非常感谢你。