当我通过一些登录表单进行设计时,我开始怀疑密码是否存储在哈希中,假设有人入侵了一个网站。
并假设该网站的用户在其他网站上使用完全相同的密码。
如果是这样,仅使用哈希,是否可以登录其他网站?
通常网站使用随机盐,因此即使您的密码在两个网站上相同,不同的网站也会以不同的方式存储其哈希值。
即使网站不使用随机盐,并且密码总是散列到相同的东西,您仍然需要知道密码才能登录这些网站。
不,您无法从哈希中推断出实际密码。这是密码散列函数的主要属性:
给定一个哈希h应该很难找到任何消息m使得h = hash( m )。这个概念与单向函数的概念有关。缺少此属性的函数很容易受到原像攻击。
您只能尝试使用适当的攻击(例如字典攻击或暴力破解)来猜测密码以找到冲突,即导致相同哈希值的输入值。
现在有一些技术可以帮助攻击者加快发现冲突的过程,例如将已知哈希值映射到输入值的预先计算的查找表。彩虹表是此类查找表的高级变体。
散列密码只是抵御黑客的第一道防线。如果黑客入侵您的网站并获取您的哈希密码数据库,他们可以使用映射到非常常用的密码的哈希“字典”。
一旦黑客知道您使用的散列方案(MD5 或 SHA-1 等),他就可以确定原始密码。这是因为这些散列方案对于输入和输出是 1 对 1 的。密码总是会产生相同的散列,并且可以反转散列以找到原始密码。
为了保护自己,您应该对密码加盐,然后对加盐+密码组合进行哈希处理。每个密码都应该与它自己唯一的盐配对。
在这里查看更多信息:http: //codingmayhem.tumblr.com/post/24552289519/storing-passwords-securely