如何处理加密库提供程序支持环境之间的差异?

时间:2015-09-16 23:57:04

标签: java encryption cryptography bouncycastle

使用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?

1 个答案:

答案 0 :(得分:1)

Java SE支持"RSA/ECB/OAEPWithSHA-256AndMGF1Padding" - 包括破折号 - 而不是"RSA2048/ECB/OAEPWithSHA256AndMGF1Padding",不包括破折号。 Java不会自动删除破折号或类似的东西,这意味着无法识别填充的字符串"OAEPWithSHA256AndMGF1Padding"。只需删除短划线,看看它是否适用于两个运行时。

可以在"Java Cryptography Architecture Standard Algorithm Name Documentation (for JDK 8)"中查看各种加密相关类支持的字符串。