继我之前关于PHP/MySQL中的盐渍密码的问题之后,我还有另外一个关于盐的问题.
当有人说"使用随机盐"来预先/附加密码时,这是否意味着:
如果盐对于每个用户来说是随机的并且与散列密码一起存储,那么原始盐如何被检索回来进行验证?
我已经阅读了很多有关此问题的问题,但许多答案相互矛盾或者我不理解.
您应该始终将密码存储为哈希,而不是纯文本.但是,您应该在数据库中的散列密码+ salt旁边存储salt(每个用户都是唯一的).这对我来说似乎不是很聪明,因为无法有人访问数据库,查找称为Admin或其他任何帐户,然后从中计算出密码?
好的,我想了解使用盐的原因.
当用户注册时,我为他/她生成一个我存储在DB中的唯一盐.然后我用SHA1散列它和密码.当他/她登录时我会重新哈希sha1($salt.$password).
但如果有人攻击我的数据库,他可以看到哈希密码和盐.
是否更难破解而不仅仅是用盐哈希密码?我不明白......
对不起,如果我是傻瓜......
如何"解码"存储在各种电子商务中的密码添加"盐".我不是专家...所以,在过去,我使用过类似的东西:
SELECT * FROM mytable WHERE email=@email AND passwd=MD5(@pwd)
Run Code Online (Sandbox Code Playgroud)
MySql MD5函数只接受一个参数...如果我有一个Salt字符串怎么办?谢谢
有谁知道它为什么叫彩虹表?记得我们已经知道有一种叫做"字典攻击"的攻击.为什么不是字典?
我记得有个人告诉我,如果我让他改变4个字节,他可以让一个文件有他想要的任何校验和(CRC-32).
我听说提到腌制哈希.我想知道是否有人将他的文件匹配我的文件会腌制MD5或SHA-1哈希更改结果,以便两个文件不再冲突?或者它只更改结束哈希值?
像大多数程序员一样,我不是密码学方面的专家,但我理解基础知识.然而,正如Jeff的博客文章所述,一点点知识可能是一件危险的事情.考虑到这一点,我理解盐值的目的但我需要一些帮助来理解如何使用盐值.
我已经阅读过关于这个主题的其他帖子,最好使用随机盐值来加密每个密码.如果是这种情况,当我尝试对用户进行身份验证时,如何重现该随机盐值?在这种情况下,我会加密用户提供的明文密码,对其进行加密,并将其与存储在数据库中的密码进行比较.在创建密码时,是否将随机盐值与加密密码一起存储在用户记录中?如果黑客拥有完整的用户记录,这会使盐值无用吗?
可能重复:
盐的目的是什么?
我刚刚读了一些关于盐的使用的内容,我一直在阅读的例子给出了在散列之前为密码添加盐以防止字典攻击的问题.
但是,我真的没有看到它有多大帮助 - 如果攻击者可以访问密码的哈希值(就像我在阅读的例子中那样),他们很可能也可以访问盐.因此,在运行字典之前,攻击者是否只能将salt添加到字典中的每个项目之前并将其后置,以查看它是否与哈希匹配?所以他们不得不多次迭代字典,这似乎不是一个保护增强?
salt ×4
security ×4
cryptography ×3
hash ×3
passwords ×3
collision ×1
mysql ×1
rainbowtable ×1
saltedhash ×1