Как хэшировать все пароли из БД с помощью функции PHP password_hash - PullRequest
0 голосов
/ 21 ноября 2018

Можно ли выполнить запрос, используя функцию password_hash(), чтобы изменить все существующие пароли из моей таблицы пользователей?

Я использую CI и не работаю вообще!

Моя модель

public function EncryptDB($filters = NULL){
     $ci =& get_instance();
     $ci->load->helper('hash');
     $query = "UPDATE users SET password = {hash_password(password)}";
     $sql = $this->db->query($query);

}

* обратите внимание, что я загружаю пользовательский helper для хеширования.

Мой помощник

function hash_password($password){
        $configs = array(
            "cost" => 10 # custo de processamento (10 -> default)
        );
        $password = password_hash($password, PASSWORD_DEFAULT, $configs);

        return $password;
    }

Мой контроллер

public function EncryptDB(){
             if($this->UsersDAO->EncryptDB()){
                  echo 'done';
             } else {
                  echo 'error';
             }
        }

1 Ответ

0 голосов
/ 21 ноября 2018

Попробуйте это решение.

  1. В этом решении предполагается, что таблица users имеет первичный ключ с именем id.
  2. Я на самом деле не запускал / тестировал этот код,Но это должно дать вам представление о том, как решить эту проблему в любом случае.
  3. Этот код выполняется внутри транзакции, поэтому если одна запись не может быть обновлена, то ни одна не будет.
  4. Этот кодвероятно, должен быть запущен только один раз для фиксированной таблицы.

    function updatePasswords(){

    $this->db->trans_start();
        $offset = 0;
        do{
            $selectQuery = $this->db
                                ->limit(100, $offset)
                                ->get('users');
            $results = $selectQuery->result();
    
            foreach ($results as $user){
                $configs = array(
                    "cost" => 10 # custo de processamento (10 -> default)
                );
                $hashedPassword = password_hash($user->password, PASSWORD_DEFAULT, $configs);
                $this->db
                    ->set('password', $hashedPassword)
                    ->where('id', $user->id)
                    ->update('users');
            }
    
            $offset += $selectQuery->num_rows();
    
        } while ($selectQuery->num_rows() > 0);
    $this->db->trans_complete();
    
    if ($this->db->trans_status()){
        die("[+] operation successfully completed.");
    }
    else{
        die("[-] operation encounted an error somewhere. not data was updated.");
    }
    

    }

...