(这开始是对 Daniel DiPaolo 的评论,以回应 Mokuchan。)
如果要存储密码(无论位置如何),请使用以下方案:
$hashedPassword = $salt 。哈希($盐。$密码);
哈希密码的存储位置应该是安全的。无论是在数据库中还是在具有适当权限集的文件中。
如果是一个文件,那么您的用户bob的“记录”和密码将如下所示(使用 BCrypt 哈希):
bob:$2a$05$tlk4M8WSpVkO7ER6QGxcwuY91MrBCQn.TCDZ5eOM1iz2sCChtR62K
任何人都无法“解密”密码。这就是使用散列算法的重点:它是不可逆的。
您声明:
有一些工具会尝试解密 md5 和 sha1,至少在某些情况下它们似乎可以工作
由于散列算法是不可逆的,因此这是不可能的。(没有“解密”选项)
我最好的猜测是,您指的是从预先计算的表中查找哈希并返回有效输入字符串的工具,可能是您的密码。
这些表称为彩虹表。它们可以被 A) 使用随机盐和 B) 使用强哈希算法(例如 BCrypt 哈希或 SHA2 系列哈希)击败
关于不正确的散列算法:MD5 和 SHA1 被认为是密码损坏的。换句话说:你不应该再使用它们了。
有关此问题的讨论,请参阅:https ://stackoverflow.com/questions/2768248/is-md5-really-that-bad