【发布时间】:2013-08-27 16:00:32
【问题描述】:
我有found 代码利用java.security.* 来加密密码。但是当我使用它时,它不起作用。每次调用 encrypt 方法的参数都一样(encrypt() 方法中显示的参数,而且每次都一样),得到不同的结果,这当然让代码没用了。这是我的代码:
public byte[] encrypt(String clearPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
System.out.println(clearPassword+" ********** "+salt);
String algorithm = "PBKDF2WithHmacSHA1";
int derivedKeyLength = 1600;
int iterations = 20000;
KeySpec spec = new PBEKeySpec(clearPassword.toCharArray(), salt, iterations, derivedKeyLength);
SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
byte [] truc = f.generateSecret(spec).getEncoded();
System.out.println(truc);
return truc;
}
public byte[] generateSalt() throws NoSuchAlgorithmException {
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[8];
random.nextBytes(salt);
return salt;
}
我想我在某些时候在原始代码中引入了一个错误,但我看不出在哪里。有什么想法吗?
【问题讨论】:
-
你能发布示例输出和调用代码吗?您是否每次都基于自播 PRNG 生成新盐?
标签: java security encryption passwords