如何使用php password\u散列函数对数据库中的所有密码进行散列

vlf7wbxs  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(361)

有没有任何可能的方法可以使用 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';
             }
        }
ghhkc1vu

ghhkc1vu1#

试试这个办法。
此解决方案假定 users 表有一个名为 id .
我实际上没有运行/测试这个代码。但它应该给你一个如何解决这个问题的想法。
此代码在事务中运行,因此如果一条记录未能更新,则没有一条记录会更新。
对于固定表,此代码可能只应运行一次。 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.");
}
``` }

相关问题