我一直在使用客户端 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/