我已经阅读了一些建议散列密码并将其存储在数据库中的问题.
当有人登录时,您将使用存储的密码散列密码.
我不明白这是如何工作的?两个字符串可以散列到相同的值 - 不太可能,但确实可能
有谁可以帮助我吗?
编辑:任何人都可以给出碰撞可能性的统计数据吗?
Sam*_*rum 24
您不应该存储未加密的密码,因为您的数据库管理员不应该访问客户密码.
散列密码可防止数据库管理员看到密码.
碰撞的可能性非常小并不是问题,因为在锁定账户之前,这并没有显着增加某人试图强行获取客户密码的机会.
PS它也是很好的做法,盐散列,使之更加仍然难以蛮力如果黑客不知怎么进入密码表之前的密码.使用彩虹表等更难
Mic*_*rdt 10
两个字符串可以散列到相同的值 - 不太可能,但确实可能
是的,但如果哈希足够大并且质量很好,那么不用担心就不够了.在口语方面:应用程序的每个用户同时被闪电击中并不是一样的,但绝对可能.你担心吗?
即使两个字符串可以散列到相同的值(并且它们肯定会这样做,因为可能值的空间比散列的空间大得多),找到这样的字符串对仍然不是那么容易(假设你使用了强大的字符串对)哈希函数).
因此,如果攻击者想要在不知道密码的情况下以其他人的身份登录,他就必须找到一个密码,该密码具有相同的哈希值,这个密码应该与查找密码一样困难(哈希函数的不可逆性是基本属性) .
如果你想在.NET中使用散列,尝试类似的东西
public static string ComputeHash(string plaintext)
{
HashAlgorithm mhash = new SHA1CryptoServiceProvider();
byte[] bytValue = Encoding.UTF8.GetBytes(plaintext);
byte[] bytHash = mhash.ComputeHash(bytValue);
mhash.Clear();
return Convert.ToBase64String(bytHash);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |