我使用pbkdf2
加密和哈希密码。我知道盐必须是未加密和可访问的,所以我可以在验证中再次使用它。每个密码的盐必须是可访问的,因此我可以对要验证的密码进行加密和散列,并将其与存储的密码进行比较。
我当时想要像这样储存盐
假设salt总是一个具有固定长度的字符串,例如10个字符
finalPassword = salt + password;
//save finalPassword in the db
然后验证
salt = getFirst10CharsOf (finalPassword);
hash to-be-validated password with that salt
compare hashed password with the saved one
我的问题是,如果一个黑客足够智能来获取我的哈希密码,那么是什么阻止她在我的代码中看到getFirst10CharsOf
部分并得到一些盐,这样她就可以很容易地解密几个哈希值?
我找到了很多理论,但我不知道如何在练习中安全地储存盐。因此,它们始终只能访问验证代码,但不能访问所有人。
由于
答案 0 :(得分:2)
盐不需要保密,它可以用于以下几个方面:1。使用彩虹表更加困难; 2.确保两个密码不会散列到相同的值,这样如果一个密码泄露了其他相同的密码不是(不同的哈希)。
答案 1 :(得分:2)
是什么阻止她在我的代码中看到getFirst10CharsOf部分并得到一些盐,
没有
所以她可以很容易地解密几个哈希?
使用单向散列的关键是你无法解密它们(甚至没有使用盐)。
使用盐(每次使用不同的盐)的关键是你不能用彩虹表强行使用它。
我不知道如何在实践中安全储存盐。
只需使用哈希密码存储它们即可。没有必要让它们无法访问。
因此,它们始终只能访问验证码,但不能访问所有人。
如果可以将数据存储在您的代码可以访问的某个地方,但有人会非法访问系统,代码运行就不行,那么就不需要首先散列密码了。