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));
}
16
demandé sur RobEarl 2013-08-06 19:39:36

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.

75
répondu Glitch Desire 2013-08-06 15:44:12