mysql - 我需要帮助创建查询以对密码进行 salt 和 md5,然后在 MySQL 表上确认登录

标签 mysql

我在 MySQL 数据库上创建了一个表的 View ,以使另一个应用程序能够使用我们现有的(集中式)客户表。

我们的密码存储为

md5(密码+盐)+“:”+盐

通常我通过我们正在连接的给定应用程序的编程语言对此进行解码,但是......

这次是第三方应用程序,我只有 SQL 和一个查询来授权用户。

你能帮我创建一个有效的 SQL 查询来进行身份验证吗?

逻辑很简单:

  • 为给定用户获取盐,(冒号后的所有内容)
  • 结合密码和盐
  • MD5密码和salt
  • 然后比较结果的md5 hash

此应用程序的默认 sql 查询是

从用户中选择* 其中用户名=?和用户密码=?

提前致谢。

最佳答案

我试过了,效果很好:

SELECT * FROM users
WHERE userPass = CONCAT( 
  MD5(CONCAT('xyzzy', (@salt := SUBSTRING_INDEX(userPass, ':', -1)))), 
  ':', @salt)
AND userName = 'bkarwin';

我知道您可能没有更改任何内容的自由,但就 FWIW 而言,MD5() 被认为对密码的加密强度不够高。建议使用 SHA-256,可通过 MySQL 6.0.5 中的 SHA2() 函数获取。

关于mysql - 我需要帮助创建查询以对密码进行 salt 和 md5,然后在 MySQL 表上确认登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263268/

相关文章:

php - mysqli 结果未填写值

php - 添加复选框以在每个循环中从数据库中删除

mysql - 连接上的 WHERE 子句使执行时间增加 4 秒

php - 如何从收藏夹表中调用项目

mysql - 使用 select * 和 select askid 得到不同的结果

mysql - 如果行值对同一个人 ID 重复,我需要在不同的列中显示行值

php - PDO 将撇号添加到 mySQL 查询

php - 无法向sql表中插入数据

java - 使用整数时出现 mySQL 语法错误

用于重复事件的 MySQL 模式 - 按特定日期查询