我正在尝试RSA加密Android上的数据并将其发送到服务器(spring)。 得到BadPaddingException:
方法: 服务器在字符串中发送公钥,我将其转换为PublicKey对象,并在加密后将数据从App发送为字符串。 server有一个私钥字符串,转换为PublicKey对象,然后解密数据。
非常感谢任何帮助。
生成密钥:
public byte[] decryptRSA(String inputData) throws Exception {
byte[] inputBytes = Base64.decodeBase64(inputData);
PrivateKey key = loadPrivateKey(getPrivateKey());
Cipher cipher1 = Cipher.getInstance("RSA");
cipher1.init(Cipher.DECRYPT_MODE, key);
return cipher1.doFinal(inputBytes);
}
private PrivateKey loadPrivateKey(String key64) throws Exception {
byte[] pkcs8EncodedBytes = Base64.decodeBase64(key64);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(keySpec);
}
服务器方法:
{{1}}
答案 0 :(得分:0)
搞定了。 所以不同的libs有Cipher的不同实现。 所以在打电话的时候
Cipher.getInstance( “RSA / ECB / PKCS1Padding”);
明确提及加密模式和填充。
希望它对某人有帮助。