你用什么?使用它有什么好处?
将所有技巧的优缺点归结为所有教程都没有告诉你的优缺点。
答案 0 :(得分:8)
简短的回答是:你没有。实际存储的是通过单向哈希函数运行用户密码的结果。在我想到使用像MD5这样的东西之前我会好好阅读this并建议查看bcrypt,因为它可以帮助抵御暴力攻击。
答案 1 :(得分:1)
哈希在存储密码时很常见。但它们都是一样的,只是它产生的哈希结果越长,就越难被黑客攻击。来自相同散列函数的散列结果通常具有相同的长度。在不限制输入文本(长度不受限制)的情况下,您可以从多个句子/单词生成1个相同的哈希字符串。这就是洞所在的地方。详细了解pigeonhole principle和Birthday Attack
我通常使用MD5()。但它已经超出标准我猜是因为有些碰撞了。不知何故,人们发明了一种能够检测出1个散列弦的系统 不止一个真正的字符串。
使用SHA代替。为了使它更安全,你可以添加$ salt,使其成为双重保护,因此,首先哈希实际密码,将盐添加到哈希密码,然后再次哈希。
请记住,结果字符串越长越好。
有人推荐bcrypt,但我以前从未使用它。
答案 2 :(得分:0)
您需要像这样存储原始密码
md5($password)
您的登录脚本应该是这样的:
$sql = "SELECT `id` WHERE username=`$username` AND password=`" . md5($password) . "`";
$result = mysql_query($sql,$link);
if (mysql_num_rows($result) == 1) {
// user is authenticated
}
这实际上应该更复杂,但是为了概念化,它已经被简化了。
答案 3 :(得分:-1)
存储密码的简单但安全的方法是使用MD5加密。
md5($password);
将给出md5加密值。
答案 4 :(得分:-1)
您可以使用两种或更多种加密算法的组合。 例如:
md5(sha1($password));
或者就像这样:
md5(md5($password));
答案 5 :(得分:-1)
为了简单起见,使用md5加盐。 MD5是单向哈希。例如:
md5("hello") = "5d41402abc4b2a76b9719d911017c592"
因此,如果没有盐,您最终会将“5d41402abc4b2a76b9719d911017c592”保存到您的数据库中。然后当通过输入密码尝试登录时,将输入密码的md5与您保存的md5进行比较。
if (md5($input_password) == "5d41402abc4b2a76b9719d911017c592")
log_in_user();
然而,md5是不安全的,因为x的md5总是y。因此,如果您要破坏数据库并找到列为“y”的密码,那么如果您已创建或下载了md5查找表,则您知道密码为“x”。
取而代之的是:
$password_to_save_to_db = md5(md5($input_password . $date_user_registered));
因此,每个用户都有自己独特的盐,这些查找表将变得无用。 (它可以为黑客想要窃取的每个密码重新创建,但这更耗时,加上双md5会让事情变得更加困难。
您可以在http://sameerparwani.com/posts/using-salts-for-extra-security
了解更多信息