我的mysql数据库中有一个用户表,它有一个密码列.目前,我使用MD5算法来哈希用户的密码以存储在数据库中.现在我想认为我是一个安全良心的人.我在阅读MySQL文档时注意到他们不推荐使用MD5或SHA/SHA1散列方法,但是没有提供替代方法.
在MySQL中散列我的密码的最佳方法是什么?在我当前的实现中,PHP和MySQL本身都支持的功能是理想的和必要的.
谢谢!
不一定你不应该使用MD5,因为你不应该只使用MD5,因为这会让你容易受到彩虹表攻击(彩虹表是预先计算的哈希值的表 - 如果你的密码是偶数的话)远程通用或简单,攻击者只需要查找哈希,他就知道你的明文密码.)
至少你应该为每个密码添加一个盐,这样任何现有的彩虹表都是无用的,迫使攻击者只为你的密码数据库生成一个全新的彩虹表.
更好的是为数据库中的每个密码使用不同的盐,比如它与之关联的用户名,这样攻击者甚至无法为整个数据库生成彩虹表,并且必须单独破解每个条目.
MD5也是一种非常快速的算法.速度是破解的敌人 - 生成哈希所需的时间越长,黑客每次尝试所需的时间就越长.像登录到您的站点的用户几乎不可察觉(如果有的话)每次使用新的附加盐对明文进行100次扫描这样的简单操作,但这会增加通过相同的方式强制输入密码所需的时间100次.
这里有更多详细信息:http://www.codinghorror.com/blog/archives/000953.html