PBKDF2函数每次输出不同的哈希值的方式

问题描述 投票:0回答:1

我正在使用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查询中使用它。正确获取了salt,每次都相同,但是生成的哈希值始终不同。

我复制了它here

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

java mysql arrays binary pbkdf2
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.