How to decrypt hash stored by bcrypt

前端 未结 5 1406
我寻月下人不归
我寻月下人不归 2020-12-13 00:37

I have this script that encrypts a password but I don\'t know how to reverse it and decrypt it. This may be a very simple answer but I don\'t understand how to do it.

<
相关标签:
5条回答
  • 2020-12-13 00:45

    You can't decrypt but you can BRUTEFORCE IT...

    I.E: iterate a password list and check if one of them match with stored hash.

    script from github: https://github.com/BREAKTEAM/Debcrypt

    0 讨论(0)
  • 2020-12-13 00:46
    # Maybe you search this ??
    For example in my case I use Symfony 4.4 (PHP).
    If you want to update User, you need to insert the User password 
    encrypted and test with the current Password not encrypted to verify 
    if it's the same User. 
    
    For example :
    
    public function updateUser(Request $req)
          {
             $entityManager = $this->getDoctrine()->getManager();
             $repository = $entityManager->getRepository(User::class);
             $user = $repository->find($req->get(id)); /// get User from your DB
    
             if($user == null){
                throw  $this->createNotFoundException('User don't exist!!', $user);
             }
             $password_old_encrypted = $user->getPassword();//in your DB is always encrypted.
             $passwordToUpdate = $req->get('password'); // not encrypted yet from request.
    
             $passwordToUpdateEncrypted = password_hash($passwordToUpdate , PASSWORD_DEFAULT);
    
              ////////////VERIFY IF IT'S THE SAME PASSWORD
             $isPass = password_verify($passwordToUpdateEncrypted , $password_old_encrypted );
    
             if($isPass === false){ // failure
                throw  $this->createNotFoundException('Your password it's not verify', null);
             }
    
            return $isPass; //// true!! it's the same password !!!
    
          }
    
    
    0 讨论(0)
  • 2020-12-13 00:57

    You simply can't.

    bcrypt uses salting, of different rounds, I use 10 usually.

    bcrypt.hash(req.body.password,10,function(error,response){ }
    

    This 10 is salting random string into your password.

    0 讨论(0)
  • 2020-12-13 01:01

    You're HASHING, not ENCRYPTING!

    What's the difference?

    The difference is that hashing is a one way function, where encryption is a two-way function.

    So, how do you ascertain that the password is right?

    Therefore, when a user submits a password, you don't decrypt your stored hash, instead you perform the same bcrypt operation on the user input and compare the hashes. If they're identical, you accept the authentication.

    Should you hash or encrypt passwords?

    What you're doing now -- hashing the passwords -- is correct. If you were to simply encrypt passwords, a breach of security of your application could allow a malicious user to trivially learn all user passwords. If you hash (or better, salt and hash) passwords, the user needs to crack passwords (which is computationally expensive on bcrypt) to gain that knowledge.

    As your users probably use their passwords in more than one place, this will help to protect them.

    0 讨论(0)
  • 2020-12-13 01:03

    To answer the original posters question.... to 'decrypt' the password, you have to do what a password cracker would do.

    In other words, you'd run a program to read from a large list of potential passwords (a password dictionary) and you'd hash each one using bcrypt and the salt and complexity from the password you're trying to decipher. If you're lucky you'll find a match, but if the password is a strong one then you likely won't find a match.

    Bcrypt has the added security characteristic of being a slow hash. If your password had been hashed with md5 (terrible choice) then you'd be able to check billions of passwords per second, but since it's hashed using bcrypt you will be able to check far fewer per second.

    The fact that bcrypt is slow to hash and salted is what makes it a good choice for password storage even today. That being said I believe NIST recommends the PBKDF2 for password hashing.

    0 讨论(0)
提交回复
热议问题