【发布时间】:2021-09-06 15:23:39
【问题描述】:
大约一年前,我为Android写了一个应用程序,并在其中使用了一个类 RSA 在这个类中,有以下代码sn -p并且应用程序工作
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding")
但是当我重新输入应用程序代码时,我没有打开新的加密信息来更改私钥,直到我将上面的代码行更改为下面的代码行。
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
问题是,如果我在 RSA 类中替换上面的代码 sn-p,则不再可能打开以前加密的信息(使用与以前相同的密钥)。 我看到以下错误
javax.crypto.BadPaddingException: error:04000084:RSA routines:OPENSSL_internal:PKCS_DECODING_ERROR
RSA解密
public static byte[] decryptByPrivateKey(byte[] data, String key)
throws Exception {
byte[] keyBytes = decryptBASE64(key);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(data);
}
【问题讨论】:
-
你有没有试过调试=打印出keyFactory.getAlgorithm给出的值?在我的机器上它是“RSA”,这与“RSA/ECB/PKCS1Padding”的算法不同。始终对您正在使用的算法使用完整的限定符。
-
您的问题标题应该修改,因为
keyFactory.getAlgorithm()似乎没有实现 PKCS#1 填充,这就是您遇到的问题。
标签: java android encryption rsa