这是一个非常奇怪的错误。在两台机器上,代码运行完美。我只是在一台全新的机器上设置它,但它不起作用。运行脚本时出现以下错误;
java.lang.RuntimeException: java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA512 SecretKeyFactory not available
导致错误的代码行是;
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance( "PBKDF2WithHmacSHA512" );
使用 JDK 1.7.0
代码全部编译正确,只是在运行时这一行失败了。我有一种感觉,这与不同的 JAR 文件或略有不同的 JDK 有某种关系,但在检查不同机器上的所有内容后,一切看起来都一样。
想法?
最佳答案
Java 8 中添加了对 PBKDF2WithHmacSHA512 的支持,Java 7 默认不支持(Java 7 本身仅支持 PBKDF2WithHmacSHA1)。
比较:
SecretKeyFactory
Algorithms对于 Java 7PBKDF2WithHmacSHA1
Constructs secret keys using the Password-Based Key Derivation Function function found in PKCS #5 v2.0.SecretKeyFactory
Algorithms适用于 Java 8PBKDF2With<prf>
Password-based key-derivation algorithm found in PKCS #5 2.0 using the specified pseudo-random function (<prf>
). Example: PBKDF2WithHmacSHA256.
因此您需要升级到 Java 8,或者降级到 PBKDF2WithHmacSHA1,或者检查是否有 JCE 提供商为 Java 7 提供 PBKDF2WithHmacSHA512(例如,Bouncy CaSTLe)。
如果您的代码在另一台装有 Java 7 的机器上运行正常,那么检查是否 lib/ext
该 Java 安装的一部分包含其他库,例如 Bouncy CaSTLe 有一个支持 PBKDF2WithHmacSHA512 的 JCE 提供程序。在这种情况下,您需要在另一台机器的 Java 安装中包含相同的库。
关于java - PBKDF2WithHmacSHA512 SecretKeyFactory 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47392965/