去评论
dz插件网

discuz x3.5非对称密码函数password_hash($password, PASSWORD_BCRYPT)使用bcrypt算法的密码转为md5(md5($pass) . $salt)密码

惧愁人
2022/12/29 15:38:38
discuz x3.5非对称密码函数password_hash($password, PASSWORD_BCRYPT)使用bcrypt算法的密码转为md5(md5($pass) . $salt)密码的破解方式:


discuz x3.5的密码生成规则:
$pw = password_hash($password, PASSWORD_BCRYPT);

函数 password_hash()

默认算法:bcrypt

查询:blowfish


对比discuz x3.4:
$pw = md5(md5($password).$salt);


转换算法:
  1. function verify_password($password, $hash, $salt = '') {
  2.                
  3.                
  4.                
  5.                 if(empty($salt)) {
  6.                         return password_verify($password, $hash);
  7.                 } else if(strlen($salt) == 6) {
  8.                         return hash_equals($hash, md5(md5($password).$salt));
  9.                 } else if(strlen($salt) > 6 && strlen($salt) < 20 && file_exists(UC_ROOT . "lib/uc_password_$salt.class.php")) {
  10.                         $classname = "uc_password_$salt";
  11.                         include(UC_ROOT . "lib/uc_password_$salt.class.php");
  12.                         return $classname::verify_password($password, $hash);
  13.                 }
  14.                 return false;
  15.         }

  16.         function upgrade_password($username, $password, $hash, $salt = '') {
  17.                 $algo = $this->get_passwordalgo();
  18.                 $options = $this->get_passwordoptions();
  19.                 if (!empty($salt) || password_needs_rehash($hash, $algo, $options)) {
  20.                         $password_new = $this->generate_password($password);
  21.                         $sqladd = "password = '$password_new', salt = ''";
  22.                         return $this->db->query("UPDATE ".UC_DBTABLEPRE."members SET $sqladd WHERE username='$username'");
  23.                 }
  24.                 return true;
  25.         }