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

如何在MySQL中的'encrypt'函数中使用'bcrypt'算法来验证密码?,mysql,encryption,bcrypt,Mysql,Encryption,Bcrypt,我有密码(qwe)的b加密值(2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS)。但当我验证时,我得到了错误的结果哈希值 mysql> select '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS' = encrypt('qwe', '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28B

我有密码(
qwe
)的b加密值(
2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS
)。但当我验证时,我得到了错误的结果哈希值

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
的支持?

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


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

在任何情况下,纯文本密码都不应命中MySQL,即使是在查询级别。否则,您可能会将密码写入日志(查询日志、常规日志、慢速查询日志等)。这太可怕了。所以不,甚至不用为使用bcrypt存储密码而烦恼…+1。即使你的方法是有缺陷的,但这与大多数网络应用相比是一个重大进步。继续前进!我知道这个问题。还有@ircmaxell还有一些场景,伙计,我有一个,我对此无能为力。。。我开发了一个应用程序,需要在每次交易后发送一些自动报告电子邮件(使用我们自己的邮件服务器)。我被迫将电子邮件密码以明文形式保存在DB中,因为我不想让用户输入应用程序内的报告邮件密码,让邮件登录到服务器并在该事务完成后发送报告邮件。如果我加密密码,我如何能自动登录到我的邮件服务器?同时,输入报表邮件密码并不是我的用户职责……但我可以用PHP中的crypt生成哈希。我假设我的系统支持bcrypt.php5.3和更高版本,使用自己的
crypt()
实现,而不是来自操作系统的实现。