【问题标题】:MySQL MD5 SELECTMySQL MD5 选择
【发布时间】:2011-06-18 04:47:45
【问题描述】:

以下查询返回 null。

SELECT `email`, `password`, `salt` FROM `users` WHERE `password` = md5(`salt`+md5('123123'+`salt`)+'123123') AND `email` = 'xeka@xeka.ru'

以下查询返回“d2b4312db21705dafd96df14f8525fef”,但为什么?

SELECT md5( 'Vwm' + md5( '123123' + 'Vwm' ) + '123123' )  

此代码返回“422ad0c19a38ea88f4db5e1fecaaa920”。

$salt = 'Vwm';
$password = '123123';

echo md5($salt . md5($password . $salt) . $password);

做用户授权。我如何创建一个对数据库的查询,以便先用 SALT 和 SALT 有这个我做了一些 MD5 函数?

【问题讨论】:

  • 请注意,即使使用(双重)加盐,使用 sha1 会更好,因为它更安全。使用 sha1 将使您的脚本更具前瞻性!

标签: mysql md5


【解决方案1】:
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm' )), '123123' )) ;

您需要 concat() 字符串,然后对它们执行 md5()。

这样它会正确返回与您的 PHP 脚本相同的值:

+--------------------------------------------------------------+
| md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm' )), '123123' )) |
+--------------------------------------------------------------+
| 422ad0c19a38ea88f4db5e1fecaaa920                             |
+--------------------------------------------------------------+

【讨论】:

    【解决方案2】:

    MySQL 中的字符串连接需要使用 CONCAT()`。这个;

    md5( '123123' + 'Vwm' )
    

    实际上是在字符串中添加一个数字:

    mysql> select '12123' + 'Vwm';
    +-----------------+
    | '12123' + 'Vwm' |
    +-----------------+
    |           12123 |
    +-----------------+
    

    所以您的查询与 PHP 端不同,因为您没有散列相同的字符串。

    【讨论】:

      【解决方案3】:
      • 盐应该在你的脚本中
      • 数据库中的盐渍密码
      • 您的脚本正在加盐密码并与数据库中加盐的版本进行比较
      • 如果一样考虑OK

      【讨论】:

      • 我需要每个用户都有自己的盐
      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2010-11-05
      • 2021-09-14
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多