java - PBKDF2WithHmacSHA512 SecretKeyFactory 不可用

标签 java exception

这是一个非常奇怪的错误。在两台机器上,代码运行完美。我只是在一台全新的机器上设置它,但它不起作用。运行脚本时出现以下错误;

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 7

    PBKDF2WithHmacSHA1 Constructs secret keys using the Password-Based Key Derivation Function function found in PKCS #5 v2.0.

  • SecretKeyFactory Algorithms适用于 Java 8

    PBKDF2With<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/

相关文章:

java - addShutdownHook 和 setUncaughtExceptionHandler 在 java 中无法按预期工作

python - 如何在 for 循环迭代器中捕获异常

java - 正则表达式 - 匹配不在两个字符串之间的字符

java - Spring Mvc 提交后获取 HTTP 状态 [404] – [Not Found]

java - 制作一种使用星星创建 X 为正方形的图像的方法

java - JUnit 测试自定义异常

c++ - Windows Mobile 在 `new` 失败时返回 0

objective-c - 在特定条件下 unarchiveObjectWithFile 崩溃

java - 对二维数组中的对象使用方法

Java - 装箱整数 - 为什么它返回 true 如果应该返回 false