perl bcrypt

perl - Cómo descifrar hash almacenado por bcrypt



(1)

Tengo este script que encripta una contraseña pero no sé cómo revertirla y descifrarla. Esta puede ser una respuesta muy simple, pero no entiendo cómo hacerlo.

#!/usr/bin/perl use Crypt::Eksblowfish::Bcrypt; use Crypt::Random; $password = ''bigtest''; $encrypted = encrypt_password($password); print "$password is encrypted as $encrypted/n"; print "Yes the password is $password/n" if check_password($password, $encrypted); print "No the password is not smalltest/n" if !check_password(''smalltest'', $encrypted); # Encrypt a password sub encrypt_password { my $password = shift; # Generate a salt if one is not passed my $salt = shift || salt(); # Set the cost to 8 and append a NUL my $settings = ''$2a$08$''.$salt; # Encrypt it return Crypt::Eksblowfish::Bcrypt::bcrypt($password, $settings); } # Check if the passwords match sub check_password { my ($plain_password, $hashed_password) = @_; # Regex to extract the salt if ($hashed_password =~ m!^/$2a/$/d{2}/$([A-Za-z0-9+//.]{22})!) { return encrypt_password($plain_password, $1) eq $hashed_password; } else { return 0; } } # Return a random salt sub salt { return Crypt::Eksblowfish::Bcrypt::en_base64(Crypt::Random::makerandom_octet(Length=>16)); }


Estás HASHING, no ENGRYPTING!

¿Cual es la diferencia?

La diferencia es que el hashing es una función unidireccional, donde el cifrado es una función bidireccional.

Entonces, ¿cómo se determina que la contraseña es correcta?

Por lo tanto, cuando un usuario envía una contraseña, no descifra su hash almacenado, en su lugar, realiza la misma operación bcrypt en la entrada del usuario y compara los hashes. Si son idénticos, aceptas la autenticación.

En caso de hash o cifrar las contraseñas?

Lo que estás haciendo ahora, hash las contraseñas, es correcto. Si simplemente cifrara las contraseñas, una violación de la seguridad de su aplicación podría permitir que un usuario malintencionado aprendiera de forma trivial todas las contraseñas de los usuarios. Si hash (o mejor, sal y hash ) las contraseñas, el usuario debe descifrar las contraseñas (lo que es computacionalmente costoso en bcrypt ) para obtener ese conocimiento.

Como los usuarios probablemente utilizan sus contraseñas en más de un lugar, esto ayudará a protegerlos.