在Java和PHP中使用PBKDF2时的结果不同

时间:2019-04-13 10:51:43

标签: java php

我已将用户密码保存在数据库中,并使用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

0 个答案:

没有答案