Java 登录过程中的安全性

Java 登录过程中的安全性,java,hash,sha,javax.crypto,Java,Hash,Sha,Javax.crypto,我一直在尝试做一些密码验证模块,我在验证过程中遇到了麻烦。我通过安全随机创建Salt字节。并以二进制格式存储在数据库中 我用哈希法对密码进行了哈希运算 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); PBEKeySpec pbeKeySpec = new PBEKeySpec(charData,salt,iterations,bitLength); hash = factory.gene

我一直在尝试做一些密码验证模块,我在验证过程中遇到了麻烦。我通过安全随机创建Salt字节。并以二进制格式存储在数据库中

我用哈希法对密码进行了哈希运算

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec pbeKeySpec = new PBEKeySpec(charData,salt,iterations,bitLength);
hash = factory.generateSecret(pbeKeySpec).getEncoded();

当我尝试验证密码时(即使用db中的salt值生成哈希)。我没有得到相同的散列值。是不是我做错了什么

这里的问题是以二进制格式存储数据。它将获取实际数据并在末尾附加0以填充剩余字节。因此,如果您不知道二进制数据的实际大小,请使用BLOB数据类型,它将仅存储实际数据。

首先验证生成的
salt
中的字节是否与从数据库检索的字节相同。
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec pbeKeySpec = new PBEKeySpec(charData,salt,iterations,bitLength);
hash = factory.generateSecret(pbeKeySpec).getEncoded();