【问题标题】:PHPMyAdmin password encryption between databases数据库之间的PHPMyAdmin密码加密
【发布时间】:2014-06-24 16:55:59
【问题描述】:

我目前正在开发一个网站,客户端使用“密码”功能将密码存储在 MySQL 数据库中。

新数据库将使用 MD5 和 Salt 的组合存储加密密码。

所以我使用加密密码将现有用户的密码复制到我们的数据库中,但是当运行密码功能检查登录时,它总是返回错误的密码。当我在正确的密码上检查密码功能的结果时,它会产生与存储的结果不同的结果。

是否需要做一些额外的工作才能使加密匹配并产生相同的结果?我必须直接从客户网站访问密码吗? (因为我已经将用户表复制到我们的本地数据库)

【问题讨论】:

    标签: mysql database phpmyadmin passwords password-encryption


    【解决方案1】:

    为了从加密中得到相同的结果,你必须在比较哈希之前使用相同的机制进行加密。

    如果您使用密码函数创建了原始密码哈希,哈希将如下所示(对于当前版本的 PASSWORD 函数

        *196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7
    

    如果使用 OLD_PASSWORD 函数创建或者像这样(在 mysql 4.1 ... 之前)

        29bad1457ee5e49e
    

    解决这个问题的直接方法是让您的身份验证查询看起来像这样

        select count(*) as authfield from your_auth_table 
        where username = 'typed-in-username'
        and
        (
             password = password('typed-in-password')
             or password = old_password('typed-in-password')
        )
    

    如果用户名和密码匹配,这将产生 authfield = 1

    如果你想在 PHP 中自己进行加密,对应的 mysql PASSWORD 算法是这样的:

      $passwordnew = '*'. strtoupper(sha1(hextostr(sha1('pass'))));
    
    
      function hextostr($hex)
      {
          $str='';
          for ($i=0; $i < strlen($hex)-1; $i+=2)
          {
                $str .= chr(hexdec($hex[$i].$hex[$i+1]));
          }
          return $str;
      }  
    

    你可以使用 old_password 函数

     $passwordold = old_password('pass');
    
     function old_password($password) {
       if ($password == '')
          return '';
       $nr = 1345345333;
       $add = 7;
       $nr2 = 0x12345671;
       foreach(str_split($password) as $c) {
          if ($c == ' ' or $c == "\t")
             continue;
          $tmp = ord($c);
          $nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
          $nr2 += ($nr2 << 8) ^ $nr;
          $add += $tmp;
       }
    
       if ($nr2 > PHP_INT_MAX)
          $nr2 += PHP_INT_MAX + 1;
    
       return sprintf("%x%x", $nr, $nr2);
     }
    

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2017-01-05
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多