java - 为什么这个 PBKDF2 函数每次都会输出不同的哈希值

标签 java mysql arrays binary pbkdf2

我正在使用 pbkdf2 对我的密码进行哈希处理。 我采用纯字符串密码,生成盐,然后像这样散列它:

byte[] salt = SecureRandom.getSeed(16);

KeySpec spec = new PBEKeySpec(
            password.toCharArray(),
            salt,
            iterations,
            keyLength * 8
            );
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

byte[] generatedSecret = f.generateSecret(spec).getEncoded();

然后,我使用准备好的语句 BINARY(64) 将盐 ( BINARY(255) ) 和哈希密码 ( SELECT ) 保存在我的 MySQL 表中.

当我尝试验证用户时,我首先获取盐,用它生成密码哈希并在 SELECT 中使用它。为用户查询。 盐被正确获取并且每次都是相同的,但生成的哈希总是不同的。

我转载了它here

编辑:在上面的链接中,错误确实是我必须使用 Arrays.equals(a, b)比较两个byte[] .

最佳答案

我的问题是,当我将盐和密码插入为BINARY()时,MySQL会用零填充byte[],所以当我获取它时,它们都有尾随 0。我通过更改盐和密码长度以匹配数据库来解决我的问题。

关于java - 为什么这个 PBKDF2 函数每次都会输出不同的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62374176/

相关文章:

php - 在mysql字段中插入≠(不等于)

python - 使用 Numpy 查找给定多个数组值的索引

c - C中的嵌套动态结构?

Java - 删除文件夹及其内容

java - 使用正则表达式解析字符串

java - 如何从war文件中获取java源代码?

c++ - 我无法让我的简单程序将二维数组传递给函数

java - 如何将 jar 中的所有类添加到 Jersey JAXBContext 上下文

php - 在浏览器上使用php查看存储在数据库中的文件

javascript - 使用 PHPExcel 将输入值存储到 Excel