我已将用户密码保存在数据库中,并使用PHP对其进行了哈希处理。当我想在用户登录时进行比较时,我将Java中用户提供的密码进行哈希处理,并将其与用PHP哈希处理的数据库中的密码进行比较。问题在于散列结果不同。
这是使用的PHP代码:
echo(hash_pbkdf2("sha1", $password, $salt, $it, $length, false));
这是使用的JAVA代码:
char[] passwordChars = password.toCharArray();
PBEKeySpec spec = new PBEKeySpec(passwordChars, salt, 3, 160);
SecretKeyFactory key = null;
try {
key = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
System.exit(54);
}
byte[] hashedPassword = null;
try {
hashedPassword = key.generateSecret(spec).getEncoded();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
System.exit(55);
}
return Hex.encodeHexString(hashedPassword);
在将字符串“ Test123”与盐“ DwFKB7yU7VFRsseWq4sHPqC2z”进行哈希处理时,在PHP中使用3的迭代,在Java中使用160的长度进行哈希,结果如下:
PHP: 6837ab8e1f6dc199b6942e5fd52584845af32258
JAVA: de47fa22b90e198974e25e3373f86440caa32dc2