2011-01-30 17 views
14

この次のクエリはnullを返しました。MySQL MD5 SELECT

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関数をいくつか実行したので、データベースへのクエリを作成しますか?

+2

ちょっと小さな頭を上げても、(二重)塩漬けでさえ、より安全なのでsha1を使用する方が良いでしょう。 sha1を使用すると、スクリプトの将来性がさらに高まります! – gnur

答えて

31
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) ; 
考慮すればデシベル
  • で塩漬けバージョンと比較されたデータベース内のスクリプト
  • 塩漬けのパスワード
  • にする必要があります

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

    それはあなたのPHPスクリプトとして正しく同じ値を返します。この方法:MySQLで

    +--------------------------------------------------------------+ 
    | md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) | 
    +--------------------------------------------------------------+ 
    | 422ad0c19a38ea88f4db5e1fecaaa920        | 
    +--------------------------------------------------------------+ 
    
  • 2
    • 塩は、スクリプトがパスワードを塩漬けと同じでOK
    +0

    私は各ユーザーが自分の塩を持っている必要があります – Isis

    11

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

    md5('123123' + 'Vwm') 
    

    は、実際に数値を文字列に追加されます。

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

    あなたは同じ文字列をハッシュしていないとして、だからあなたのクエリは、PHP側と同じではありません。