我有代码:
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()));
可以帮帮我吗? 请!!!
答案 0 :(得分:1)
看看本教程适用于DES加密
http://www.avajava.com/tutorials/lessons/how-do-i-encrypt-and-decrypt-files-using-des.html
答案 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下载。