如何在MySQL的`encrypt`函数中使用`bcrypt`算法来验证密码?

时间:2013-11-30 02:19:10

标签: mysql encryption bcrypt

我有密码($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的支持?

1 个答案:

答案 0 :(得分:15)

你做不到。 MySQL ENCRYPT()函数使用操作系统的crypt()函数 - 如果您的操作系统不支持bcrypt哈希,MySQL也不支持它们。

另外,不要使用MySQL ENCRYPT()功能。正如ircmaxell所指出的,您传递给MySQL查询的任何数据都可能最终出现在服务器日志文件中,因此将其用于与密码相关的任何内容都可能不安全。