使用javax.crypto
时,以下代码在使用Oracle的JDK(SunJCE?)时失败,但对于IBM的JDK(IBMJCE?)则没问题:
String asymPadding = "RSA2048/ECB/OAEPWithSHA256AndMGF1Padding";
String secKeyEncoded = getSymmetricKey(secKey);
KeyPair keyPair = getKeyPair(SELF4);
if (asymmPadding.contains(RSA2048)) {
asymmPadding = RSA.concat(asymmPadding.substring(asymmPadding.indexOf("/")));
}
Cipher cipher = Cipher.getInstance(asymPadding);
密码调用时抛出的错误:
Cannot find any provider supporting RSA/ECB/OAEPWithSHA256AndMGF1Padding
这是否意味着我需要使用其他提供商编写加密/解密,例如Bouncy Castle?
答案 0 :(得分:1)
Java SE支持"RSA/ECB/OAEPWithSHA-256AndMGF1Padding"
- 包括破折号 - 而不是"RSA2048/ECB/OAEPWithSHA256AndMGF1Padding"
,不包括破折号。 Java不会自动删除破折号或类似的东西,这意味着无法识别填充的字符串"OAEPWithSHA256AndMGF1Padding"
。只需删除短划线,看看它是否适用于两个运行时。
可以在"Java Cryptography Architecture Standard Algorithm Name Documentation (for JDK 8)"中查看各种加密相关类支持的字符串。