Java加密等于不起作用

标签 java hash

好的,我有这个哈希方法:

public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException {
    // Returns only the last part of whole encoded password
    PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());

    gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS);
    byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();

    return Base64.toBase64String(dk);
}

据我所知,它的哈希值很好,当它返回一个字符串时,我将它与我拥有的字符串进行比较,它们看起来相同,但 .equals 方法说不存在。任何人都有任何想法,因为我真的全力以赴

这是整个 LoginHelper 类:

import java.io.UnsupportedEncodingException;

import org.spongycastle.crypto.digests.SHA256Digest;
import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator;
import org.spongycastle.crypto.params.KeyParameter;
import org.spongycastle.util.encoders.Base64;

public class LoginHelper {
    public static final Integer DEFAULT_ITERATIONS = 20000;

    public static boolean passwordCorrect(String enteredPassword, String storedPassword) throws UnsupportedEncodingException {
        String[] parts = storedPassword.split("\\$");
        String salt = parts[2];
        String storedHash = parts[3];
        String calculatedHash = getEncodedHash(enteredPassword, salt);

        System.out.println(storedHash);
        System.out.println(calculatedHash);

        System.out.println(storedHash.length());
        System.out.println(calculatedHash.length());

        return storedPassword.equals(calculatedHash);
    }

    public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException {
        // Returns only the last part of whole encoded password
        PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());

        gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS);
        byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();

        return Base64.toBase64String(dk);
    }
}

我打电话的方式是:

System.out.println(LoginHelper.passwordCorrect("password","pbkdf2_sha256$20000$wlW7Po1nm1DW$nt9LYWbxwvHIXmyBGUQG7NyPDkrt/2fivN3ws//HzLnks="));

最佳答案

storedHashcalculatedHash进行比较。您正在比较 storedPassword,它仍然具有前缀 “pbkdf2_sha256$20000$”

关于Java加密等于不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662074/

相关文章:

java - 双重依赖注入(inject)和良好实践

java - 在大型 CSV 中查找行的最简单、最快的方法

java - 如何使用 Sparql 检索给定单词的 DBPedia 'class' 属性?

javascript - 哪个哈希函数更适合在小型哈希表中表示 128 位随机 id

java - 为什么这个数组会出现空指针异常?

java - SQL 服务器索引

java - 将 26 个整数的数组转换为字符(字母)

python - 在txt文件中添加新的联系信息

arrays - 访问散列数组的更优雅的方式

java - Cassandra = 内存/编码- key 占用空间(哈希/字节[]=>十六进制=>UTF16=>字节[])