如何在基于现代 OpenJDK 的 JVM (Semeru) 中添加对 PBEWithMD5AndTripleDES 算法的支持

How can I add support for PBEWithMD5AndTripleDES algorithm in modern OpenJDK based JVM (Semeru)

我正在尝试 运行 使用 Semeru 的一些遗留代码:

java -version
openjdk version "1.8.0_322"
IBM Semeru Runtime Open Edition (build 1.8.0_322-b06)
Eclipse OpenJ9 VM (build openj9-0.30.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20220128_306 (JIT enabled, AOT enabled)
OpenJ9   - 9dccbe076
OMR      - dac962a28
JCL      - c1d9a7af7c based on jdk8u322-b06)

但是此代码依赖于 OpenJDK 中不再包含的专有 Oracle 密码,因此当 运行ning:

Cipher.getInstance("PBEWithMD5AndTripleDES");

我遇到异常:

Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting PBEWithMD5AndTripleDES
    at javax.crypto.Cipher.getInstance(Cipher.java:543)

我试过将 Bouncy Castle 作为替代提供商,但没有成功。

是否有机会获得一些支持此功能的开源供应商?

我已经尝试将提供程序指定为 SunJCE,它应该按照以下内容包含:

cat /opt/java/openjdk/lib/security/java.security | grep security.provider
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC

但是遇到同样的错误...

分享我自己的解决方案,以防其他人遇到同样的问题。

该密码实际上在 openjdk 编译(IBM Semeru Runtime Open Edition(build 1.8.0_322-b06))的 /lib/ext/sunjce_provider.jar 文件中可用。

正如在问题上发布的那样,它实际上在提供者列表中(索引 6),但未加载 jar。我还没有调查扩展类加载器是否有任何我不知道的变化,但是,到目前为止,手动将该 jar 添加到应用程序类路径已经完美地工作并且密码工作。