Аутентификация с солью - PullRequest
       29

Аутентификация с солью

0 голосов
/ 06 января 2019

Я пытаюсь написать знак активности, я написал функцию hashPassword ниже. Почему это дает другой результат для той же соли и пароля?

  import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.PBEKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

public class Main {

    public static void main(String[] args) {


        System.out.println("Hello World!");
       try { System.out.println("test1: "+hashPassword("[B@2b1e4124","bfnfnfjfjf"));
           System.out.println("test2: "+hashPassword("[B@2b1e4124","bfnfnfjfjf"));}
       catch (NoSuchAlgorithmException | InvalidKeySpecException e){}

    }
     public static  String hashPassword(String password, String salt) throws NoSuchAlgorithmException, InvalidKeySpecException {

        char[] passwordChars = password.toCharArray();
        byte[] saltBytes =salt.getBytes();
        PBEKeySpec spec = new PBEKeySpec(
                passwordChars,
                saltBytes,
                5000,
                10
        );
        SecretKeyFactory key = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
        byte[] hashedPassword = key.generateSecret(spec).getEncoded();
        return hashedPassword.toString();
    }

}

1 Ответ

0 голосов
/ 06 января 2019

Ваш хеш фактически вычисляет один и тот же результат каждый раз, но вы вызываете toString для полученного байтового массива. Это возвращает строку отладки, которая отличается для каждого экземпляра (см. этот вопрос для деталей).

Вместо

return hashedPassword.toString();

Вы должны

return hashedPassword;

... и используйте byte[] напрямую.

Если вы хотите отобразить хэш в удобочитаемом формате, вы можете напечатать его следующим образом:

String hashString = new BigInteger(1, hashedPassword).toString(16);
System.out.println(hashString);

В вашем коде есть вторая ошибка. Четвертый аргумент конструктора PBEKeySpec - длина в битах . 10 слишком коротка, чтобы быть полезной. Вы, вероятно, хотите 512 (длина вывода SHA512).

...