PHP 项目的用户密码设计
简单聊一聊用户系统的密码存储设计。 历史变迁 首先,最开始大家用的都是明文存储用户的密码,想着,反正存储在服务端,也只有服务端看得到, 但这些年这么多脱裤事件,终于意识到不能再使用明文了, 于是,大家改用 md5 等哈希算法,为用户密码“加密”,但数据库泄漏后,仍然可以使用 字典攻击 破解。字典攻击 是用一个字典文件,储存了单词、短语、常用密码和他们 hash 后结果。将密码与 hash 结果对比,就能破解。 为了解决这个问题,研发工程师又在密码的hash的过程中加 salt, salt是一串随机值,与 hash 后的密码一起保存在数据库。 这恐怕只能使用暴力破解了,但现在GPU的发展,使得暴力破解成为可能,如果被脱裤,则更容易破解。 同时期的 GPU 的计算单元比CPU多, L1/L2/L3缓存和控制器较少, 所以GPU非常适合做并行且无需内存参与的计算任务。 解决方案