【问题标题】:Java cipher keys convertion does not properly workJava 密码密钥转换无法正常工作
【发布时间】:2013-01-15 08:37:31
【问题描述】:

我有代码:

String Password = PasswordText.getText();
SecretKeySpec SKC = new SecretKeySpec(Password.getBytes(), "DES");
PBEKeySpec PKS = new PBEKeySpec(Password.toCharArray());
SecretKeyFactory SKF = null;
try{
    SKF = SecretKeyFactory.getInstance("DES");
} catch(NoSuchAlgorithmException AlgorithmFail) {
    return;
}
SecretKey CipherKey = null;
try{
    CipherKey = SKF.generateSecret(SKC);
} catch(InvalidKeySpecException KeyFail) {
    return;
}

在最后一条语句中,我导致失败:“不适当的密钥规范”。该失败也导致我在最后一条语句中使用 SKC 而不是 PKS。我使用的代码示例来自互联网。请把我踢到我的错误。在所有示例中,但语句确实有效:

SecretKey MyKey = SecretKeyFactory.getInstance("DES")
                    .generateSecret(new PBEKeySpec(Password.toCharArray()));

可以帮帮我吗? 请!!!

【问题讨论】:

  • Password(和PasswordText)包含什么?

标签: java key encryption


【解决方案1】:
【解决方案2】:

您不能随意混合和匹配这些 keyspecs。不幸的是,文档非常令人困惑,并且不清楚如何执行此操作。 Sun 提供商的 SecretKeyFactory 似乎要求 DES 密钥由 DESKeySpec 实例指定:DESKeySpec SKC = new DESKeySpec(Password.getBytes());

很遗憾,我不明白你的问题的其余部分。

【讨论】:

    【解决方案3】:

    您可以将 Bouncy Castle 添加为提供程序。然后添加:

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    

    到你的例子的开头。并使用:

    secretKeyFactory = SecretKeyFactory.getInstance("DES", "BC");
    

    您需要使您的项目依赖于bcprov jar(可能是bcprov-jdk15on-147.jar)。从here下载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多