Java密码密钥转换不正常工作

时间:2013-01-15 08:37:31

标签: java key encryption

我有代码:

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

可以帮帮我吗? 请!!!

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您不能以任何方式混合和匹配这些键规格。遗憾的是,文档非常令人困惑,并且不清楚如何执行此操作。 Sun提供程序的SecretKeyFactory似乎要求由DESKeySpec实例指定DES密钥:DESKeySpec SKC = new DESKeySpec(Password.getBytes());

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

答案 2 :(得分:0)

您可以添加Bouncy Castle作为提供者。然后添加:

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

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

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

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