Cómo comprobar la altura de la contraseña con sal y hash

brisdalen:

Estoy investigando la seguridad de usuario y contraseña de inicio de sesión, y más específicamente almacenar y combinar los hashes de contraseñas saladas en bases de datos. Entiendo los conceptos básicos de la salazón y hash, pero no entiendo cómo se supone que debo comprobar con el hash de valor almacenado en un registro de un intento de acceso, cuando la sal se genera al azar antes de cada almohadilla?

public static void test(String password) throws NoSuchAlgorithmException, InvalidKeySpecException {
    int iterations = 65536;
    char[] passChar = password.toCharArray();
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    byte[] salt = new byte[16];
    random.nextBytes(salt);

    PBEKeySpec spec = new PBEKeySpec(passChar, salt, iterations, 512);
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    byte[] hash = factory.generateSecret(spec).getEncoded();

    System.out.println(iterations + ":\n" + toHex(salt) + ":\n" + toHex(hash));
}
Bram:

La sal de la contraseña debe ser almacenado junto con el hash. A veces esto se hace como una parte de la almohadilla (por ejemplo, los x primeros caracteres del hash son la sal), a veces por separado (por ejemplo, otra columna).

Al comprobar la contraseña, no se debe generar una nueva sal al azar, pero en lugar de utilizar el generado y almacenado antes.

Así se crea otra de hash utilizando la contraseña proporcionada por el usuario y la sal almacenada, y luego comprobar si esto coincide con el hash almacenado.

La mayoría de passwordEncoders proporcionan un método que hace esto por usted, por ejemplo, echa un vistazo a este artículo que explica cómo utilizar el codificador contraseña Bcrypt.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=337356&siteId=1
Recomendado
Clasificación