PBKDF2WithHmacSHA512 SecretKeyFactory不可用

Mic*_*per 0 java exception

这是一个非常奇怪的错误。在两台计算机上,代码可以完美运行。我只是在一台全新的机器上进行了设置,因此无法正常工作。运行脚本时出现以下错误;

java.lang.RuntimeException: java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA512 SecretKeyFactory not available
Run Code Online (Sandbox Code Playgroud)

导致错误的代码行是;

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance( "PBKDF2WithHmacSHA512" );
Run Code Online (Sandbox Code Playgroud)

使用JDK 1.7.0

代码都正确编译,只是在运行时在此行失败。我感觉这与一个不同的JAR文件或一个稍有不同的JDK有一些关联,但是在检查了不同机器上的所有内容之后,所有内容看起来都是相同的。

有什么想法吗?

Mar*_*eel 5

Java 8中添加了对PBKDF2WithHmacSHA512的支持,默认情况下在Java 7中不提供该支持(Java 7本身仅支持PBKDF2WithHmacSHA1)。

比较:

  • SecretKeyFactoryJava 7的算法

    PBKDF2WithHmacSHA1 使用PKCS#5 v2.0中提供的基于密码的密钥派生功能构造秘密密钥。

  • SecretKeyFactoryJava 8的算法

    PBKDF2With<prf>使用指定的伪随机函数(<prf>)在PKCS#5 2.0中找到基于密码的密钥派生算法。示例:PBKDF2WithHmacSHA256。

因此,您需要升级到Java 8,或降级到PBKDF2WithHmacSHA1,或检查是否有JCE提供程序为Java 7提供PBKDF2WithHmacSHA512(例如,Bouncy Castle)。

如果您的代码在使用Java 7的另一台计算机上运行正常,则检查lib/ext该Java安装是否包含其他库,例如Bounce Castle具有支持PBKDF2WithHmacSHA512的JCE提供程序。在这种情况下,您将需要在另一台机器的Java安装中包含相同的库。