web-dev-qa-db-ja.com

MySQLの「encrypt」関数内で「bcrypt」アルゴリズムを使用してパスワードを検証する方法

Bcrypted value($2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS)のパスワード(qwe)。しかし、確認すると、間違った結果のハッシュ値が表示されます。

mysql> select '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS' = encrypt('qwe', '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS') as is_valid; 
+----------+
| is_valid |
+----------+
|        0 |
+----------+

select encrypt('qwe', '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS') as hash;
+---------------+
| hash          |
+---------------+
| $2tBKnsbV2Szg |
+---------------+

md5 正常に動作します

mysql> select '$1$$.dCRcHz4ApIYzcA0g/qz3/' = encrypt('qwe', '$1$$.dCRcHz4ApIYzcA0g/qz3/') as is_valid; 
+----------+
| is_valid |
+----------+
|        1 |
+----------+

MySQLにbcryptのサポートを追加するには?

13
sectus

できません。 MySQL ENCRYPT()関数はオペレーティングシステムのcrypt()関数を使用します—オペレーティングシステムがbcryptハッシュをサポートしていない場合、MySQLもそれらをサポートしません。

また、MySQL ENCRYPT()関数を使用しないでください。 ircmaxellが述べたように、MySQLクエリに渡すデータはすべてサーバーログファイルに記録される可能性があるため、パスワード関連のデータに使用するのは安全ではない可能性があります。

21