MySQL 纯文本哈希密码

标签 mysql authentication hash

我一直在使用客户端 MySQL 数据库,该数据库以纯文本形式存储用户密码。正如我提到的,这是一个巨大的潜在风险,我们谈到了对密码进行哈希处理(并不是说这是一个完整的解决方案,因为现在可以相对轻松地“去哈希化”),我遇到了一个我认为我的问题可能知道答案,但我想 100% 确定。

这个客户开发了几个桌面应用程序,要求用户输入他们的用户名/密码,当然都是纯文本形式。

因此,如果我们通过将每个密码字段更新为其 MD5(例如)哈希来对密码进行哈希处理,是否可以修改桌面应用程序以对接收/输入的密码执行此哈希,然后比较它们(和登录)是否有效?

基本上,登录过程一如既往,但使用散列密码代替,这对用户来说是透明且不易察觉的操作吗?

最佳答案

是的,这会奏效并且应该对用户透明。

但是,它不是很安全。如果有人获得登录数据库的副本,他们将获得散列密码。由于您是通过网络发送散列密码,他们只需要知道这些——他们不需要取消散列。

最好通过网络发送明文密码,并在服务器应用程序或数据库查询中进行散列,例如

SELECT *
FROM users
WHERE username = :username AND password = encryption_function(:password)

参见 Encryption and Compression Functions了解 MySQL 可用的加密功能。

这样,如果有人获得了您的用户数据库,他们将需要解密密码才能入侵您的应用程序。

无论哪种方式,您都应确保通过加密连接(例如 SSL)传输密码。如果有人嗅探流量,任何一种机制都可以让他们获得登录所需的任何信息。

关于MySQL 纯文本哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287325/

相关文章:

php - 使用 Curl 登录网站,转到链接,再次提交表单并获取输出

tomcat - 如何在 tomcat6 中使用带有 BASIC 身份验证的散列密码?

c++ - 使用 string* 作为 unordered_set 中的键

python - 从 Python 向 MySQL 插入 unix 时间戳

javascript - 具有身份验证的 Cloud Firestore

session - 通过 WSFederationAuthenticationModule 进行身份验证后在哪里填充 session

ruby - 将键数组和值数组转换为 Ruby 中的哈希

mysql - 有条件地对不同的列进行 GROUP BY

MySQL/InnoDB : more optimal to have two non-unique index columns or combine them in unique primary key?

PHP MySQL 用可点击的表行显示数据