【发布时间】:2012-12-09 00:52:11
【问题描述】:
我正在尝试使用 RSA 2048 加密和解密数据。
我们有一个公钥和一个私钥,并且将始终使用相同的。 但问题是,当我解密时,我得到 javax.crypto.BadPaddingException: Data must start with zero
File file = new File("C:\\temp-ldi\\pubkey.txt");
FileWriter writer = new FileWriter(file);
file.createNewFile();
encryptedText = RSACrypto.encrypt("PLAIN TEXT"); //no argument of pub-key, generate key pair
writer.write(new BASE64Encoder().encode(RSACrypto.pubKeyToBytes(RSACrypto.publicKey)));
writer.close();
file = new File("C:\\temp-ldi\\privkey.txt");
writer = new FileWriter(file);
file.createNewFile();
writer.write(new BASE64Encoder().encode(RSACrypto.privKeyToBytes(RSACrypto.privateKey)));
writer.close();
然后我使用下面的代码来解密数据
File privfile = new File("C:\\temp-ldi\\privkey.txt");
File pubfile = new File("C:\\temp-ldi\\pubkey.txt");
FileReader reader = new FileReader(pubfile);
// file.createNewFile();
BufferedReader br = new BufferedReader(reader);
StringBuilder sb = new StringBuilder();
String s;
while ((s = br.readLine()) != null) {
sb.append(s);
}
br.close();
reader.close();
this.encryptedText = RSACrypto.encrypt("PLAIN TEXT", sb.toString());
reader = new FileReader(privfile);
br = new BufferedReader(reader);
sb = new StringBuilder();
while ((s = br.readLine()) != null) {
sb.append(s);
}
br.close();
reader.close();
System.out.println(RSACrypto.decrypt(this.encryptedText, sb.toString()));
所有的加解密字符串都会返回Base64Encoder/Base64Decoder格式。
如何从文件/简单字符串中传递私钥,以免修改密钥。
更新 RSACrypto 类:http://sebsauvage.net/paste/?83517f2b3db94d24#Sdu12/vXPuxa5AxO95FPgKSF6N40R2DzD6lwQkvroyE=
【问题讨论】:
-
请显示 RSACrypto 类的代码。
-
你将私钥保存在文件
prikey.txt,但从privkey.txt读取它 -
粘贴时只是拼写错误。从同一个文件中读取。假设该文件夹没有其他文件
标签: java encryption rsa public-key-encryption private-key