Moh*_*mad 18 salt password-hash
有人可以帮我理解腌制的效果如何?
到目前为止,我理解以下内容:
我们如何存储盐,或者在用户登录时知道它是什么?我们将它存放在自己的领域吗?如果我们不这样做,应用程序如何确定盐是什么?如果我们存储它,它不会打败整个目的吗?
Zip*_*pit 29
在散列之前将Salt与密码结合使用.将密码和salt clear值连接起来,并对生成的字符串进行哈希处理.这保证即使两个人拥有相同的密码,你也会得到不同的哈希值.(也使得使用彩虹表的攻击称为字典攻击要困难得多).
然后将盐与散列结果一起以原始/清除格式存储.然后,当您要验证密码时,您将再次执行原始过程.将记录中的salt与用户提供的密码相结合,对结果进行哈希处理,比较哈希值.
你可能已经知道了.但重要的是要记住.每次必须随机生成盐.每个受保护的哈希值必须不同.通常RNG用于产生盐.
所以..例如:
用户密码:"mypassword"
随机盐:"abcdefg12345"
结果 - 明文:"mypassword:abcdefg12345"(你如何组合它们取决于你.只要你每次使用相同的组合格式) .
哈希得到的明文:"somestandardlengthhashbasedonalgorithm"
在您的数据库中,您将存储使用的哈希和salt.我见过两种方式:
方法1:
field1 - salt ="abcdefg12345"
field2 - password_hash ="somestandardlengthhashbasedonalgorithm"
方法2:
field1 - password_hash ="abcdefg12345:somestandardlengthhashbasedonalgorithm"
在任何一种情况下,您都必须从数据库中加载salt和密码哈希并重做哈希值以进行比较
Ian*_*Ian 12
salt <- random
hash <- hash(password + salt)
store hash:salt
Run Code Online (Sandbox Code Playgroud)
后来
input password
look up hash:salt
hash(password+salt)
compare with stored hash
Run Code Online (Sandbox Code Playgroud)
得到它了?