0

我有代码:

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()));

可以帮助我吗? 请!!!

4

3 回答 3

1

看看本教程,它适用于 DES 加密

http://www.avajava.com/tutorials/lessons/how-do-i-encrypt-and-decrypt-files-using-des.html

于 2013-01-15T08:43:29.217 回答
1

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

不幸的是,我不明白你问题的其余部分。

于 2013-01-15T22:52:26.257 回答
0

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

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

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

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

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

于 2013-01-15T08:57:38.860 回答