Comment décrypter le hachage stocké par bcrypt
j'ai ce script qui crypte un mot de passe mais je ne sais pas comment l'inverser et le décrypter. Cela peut être une réponse très simple mais je ne comprends pas comment le faire.
#!/usr/bin/perl
use Crypt::Eksblowfish::Bcrypt;
use Crypt::Random;
$password = 'bigtest';
$encrypted = encrypt_password($password);
print "$password is encrypted as $encryptedn";
print "Yes the password is $passwordn" if check_password($password, $encrypted);
print "No the password is not smalltestn" 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 = 'a$'.$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, ) eq $hashed_password;
} else {
return 0;
}
}
# Return a random salt
sub salt {
return Crypt::Eksblowfish::Bcrypt::en_base64(Crypt::Random::makerandom_octet(Length=>16));
}
1 réponses
vous êtes HASHING, pas ENCRYPTING!
Quelle est la différence?
la différence est que le hachage est une fonction à sens unique, où le cryptage est une fonction à double sens.
alors, comment s'assurer que le mot de passe est correct?
par conséquent, quand un utilisateur soumet un mot de passe, vous ne décrypter votre hash stocké, à la place vous effectuez le même bcrypt
opération sur l'entrée de l'utilisateur et de comparer les tables de hachage. Si elles sont identiques, vous acceptez l'authentification.
devez-vous Hachez ou chiffrer les mots de passe?
ce que vous faites maintenant -- Hasher les mots de passe -- est correct. Si vous deviez simplement crypter les mots de passe, une brèche dans la sécurité de votre application pourrait permettre à un utilisateur malveillant d'apprendre trivialement tous les mots de passe de l'utilisateur. Si vous hachage (ou mieux, sel et de hachage) mots de passe, l'utilisateur doit cracker les mots de passe (ce qui est coûteux sur le plan informatique bcrypt
) pour acquérir cette connaissance.
Que vos utilisateurs utilisent probablement leurs mots de passe dans plus d'un endroit, cela aidera à protéger.