web-dev-qa-db-ja.com

MySQL MD5 SELECT

次のクエリはnullを返しました。

SELECT `email`, `password`, `salt` FROM `users` WHERE `password` = md5(`salt`+md5('123123'+`salt`)+'123123') AND `email` = '[email protected]'

次のクエリは「d2b4312db21705dafd96df14f8525fef」を返しましたが、なぜですか?

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

このコードは「422ad0c19a38ea88f4db5e1fecaaa920」を返しました。

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

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

ユーザー認証を行います。データベースへのクエリを作成して、最初にSALTを取得し、SALTでこれを取得してMD5機能を実行するにはどうすればよいですか?

16
Isis
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm' )), '123123' )) ;

文字列をconcat()してから、それらに対してmd5()を実行する必要があります。

このようにして、PHPスクリプトと同じ値を正しく返します。

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

MySQLでの文字列の連結には、CONCAT() `の使用が必要です。この;

md5( '123123' + 'Vwm' )

実際に文字列に数字を追加しています:

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

したがって、クエリはPHP側と同じではありません。同じ文字列をハッシュしていないためです。

11
Marc B
  • 塩はスクリプトに含まれている必要があります
  • データベースのソルトパスワード
  • あなたのスクリプトはパスワードをソルティングし、dbのソルトバージョンと比較します
  • 同じ場合はOKを考慮
2
bensiu