使用类 PBEKeySpec
以及 SecretFactory
只有,而且知道 salt
以及 coded
有办法解密吗 coded
恢复 password
?
public static byte[] encodePassword(char[] password, byte[] salt) {
PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH);
Arrays.fill(password, Character.MIN_VALUE);
try {
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] coded = skf.generateSecret(spec).getEncoded();
return coded;
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new AssertionError("Error while hashing a password: " + e.getMessage(), e);
} finally {
spec.clearPassword();
}
}
2条答案
按热度按时间yqkkidmi1#
不,不可能从密码哈希算法(如pbkdf2)中恢复密码。不可逆的事实是使用这种算法的主要原因之一。
7vux5j2d2#
如果你知道密钥和盐,你可以强行输入密码,但这需要很长时间。
单向加密是您无法在许多站点上“恢复”密码的原因,只能重置密码,这是在登录期间存储密码和比较编码字符串的建议方法。