如何处理加密库提供程序支持环境之间的差异?
How to handle Crypto library provider support differences between environments?
使用 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)编写 encryption/decryption?
Java SE 支持 "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"
- 包括破折号 - 而不是 "RSA2048/ECB/OAEPWithSHA256AndMGF1Padding"
不包括破折号。 Java 不会自动删除破折号或类似的东西,这意味着无法识别用于填充的字符串 "OAEPWithSHA256AndMGF1Padding"
。只需删除破折号,看看它是否适用于两个运行时。
各种密码学相关支持的字符串类可以在"Java Cryptography Architecture Standard Algorithm Name Documentation (for JDK 8)".
中查看
使用 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)编写 encryption/decryption?
Java SE 支持 "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"
- 包括破折号 - 而不是 "RSA2048/ECB/OAEPWithSHA256AndMGF1Padding"
不包括破折号。 Java 不会自动删除破折号或类似的东西,这意味着无法识别用于填充的字符串 "OAEPWithSHA256AndMGF1Padding"
。只需删除破折号,看看它是否适用于两个运行时。
各种密码学相关支持的字符串类可以在"Java Cryptography Architecture Standard Algorithm Name Documentation (for JDK 8)".
中查看