【问题标题】:Java SecretKeyFactory not availaleJava SecretKeyFactory 不可用
【发布时间】:2017-03-28 22:59:12
【问题描述】:

我正在尝试使用 SecretKeyFactory 生成带有密码的私钥,当我启动程序时出现运行时异常,提示算法不可用。但在其他电脑上它工作正常!有什么帮助吗?

private static void generatePrivateKey(String pwd) {

    try {
        PBEKeySpec keySpec = new PBEKeySpec(pwd.toCharArray());
        SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithHmacSHA256AndAES_128");
        PRIVATE_KEY = kf.generateSecret(keySpec);
    } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
        e.printStackTrace();
    }
}

运行时异常:

【问题讨论】:

  • 您知道其他具有 PBEWithHmacSHA256AndAES_128 的其他 PC 的特定 JRE 吗?您当前使用的是 JRE 1.8.0_121,可能该环境不支持它。试试这个stackoverflow.com/questions/9333504/… 列出可用的算法
  • 是的,另一台 PC 有 JRE 1.8.0_121,它运行得很好

标签: java security private-key java-security


【解决方案1】:

有多种可能性:

  1. 可能是 JRE 已被修改
  2. 已安装额外的加密提供程序。由于您没有在 ScretKeyFactory 创建中指定提供程序,因此您不知道使用了哪个提供程序。在 Oracle JRE 中,您需要的算法由 SunJCE 提供。因此以下应该有效:SecretKeyFactory.getInstance("PBEWithHmacSHA256AndAES_128", "SunJCE");

【讨论】:

  • 这样,我有另一个运行时异常:“java.security.NoSuchProviderException: no such provider: SunJCE”
  • 那么 JRE 是非标准的或被操纵的。卸载它并从 Oracle 加载当前版本。
  • 我也是这样做的,问题依然存在。我安装了最后一个 java 8 版本
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2014-08-21
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多