Hash 如何安全地存储密码

Hash 如何安全地存储密码,hash,passwords,password-protection,salt,Hash,Passwords,Password Protection,Salt,我使用pbkdf2加密和散列密码。我知道盐必须是未加密的,并且可以访问,这样我就可以在验证中再次使用它。每个密码的salt都必须是可访问的,这样我就可以对要验证的密码进行salt和散列,并将其与存储的密码进行比较 我正想这样储存盐 假设salt总是一个固定长度的字符串,例如10个字符 finalPassword = salt + password; //save finalPassword in the db 然后进行验证 salt = getFirst10CharsOf (finalPass

我使用pbkdf2加密和散列密码。我知道盐必须是未加密的,并且可以访问,这样我就可以在验证中再次使用它。每个密码的salt都必须是可访问的,这样我就可以对要验证的密码进行salt和散列,并将其与存储的密码进行比较

我正想这样储存盐

假设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部分并得到一些盐,这样她就可以轻松地解密一些哈希

我发现了很多理论,但我不知道如何在实践中安全储存盐。因此,它们总是可以仅访问验证代码,而不是所有人


谢谢

盐不需要保密,它可以用来做几件事:1。使使用彩虹表更加困难和2。确保两个密码不会散列为相同的值,以便在其中一个密码被泄露时,其他相同的密码不会是不同的散列

盐不需要保密,它有几种用途:1。使使用彩虹表更加困难和2。确保两个密码不会散列为相同的值,以便在其中一个密码被泄露时,其他相同的密码不会是不同的散列

是什么阻止了她看到我代码中的GetFirst部分并得到一些盐

没什么

所以她可以很容易地解密几个哈希

使用单向散列的意义在于,即使使用盐也无法解密它们

每次使用一种盐和一种不同的盐的意义在于,你不能用彩虹桌来强迫他们

我不知道如何在实践中安全储存盐

只需使用哈希密码存储它们。没有必要让他们无法接近

因此,它们总是可以仅访问验证代码,而不是所有人

如果可以将数据存储在代码可以访问的地方,但有人会非法访问代码运行的系统,那么首先就不需要散列密码

是什么阻止了她看到我代码中的GetFirst部分并得到一些盐

没什么

所以她可以很容易地解密几个哈希

使用单向散列的意义在于,即使使用盐也无法解密它们

每次使用一种盐和一种不同的盐的意义在于,你不能用彩虹桌来强迫他们

我不知道如何在实践中安全储存盐

只需使用哈希密码存储它们。没有必要让他们无法接近

因此,它们总是可以仅访问验证代码,而不是所有人


如果有可能将数据存储在代码可以访问的某个地方,但有人会非法访问代码运行的系统,那么首先就不需要散列密码。

这个问题似乎是另一个问题的扩展。@zaph Yes,盐部分指定了它,询问我保存盐的想法是否正确。这个问题似乎是另一个问题的延伸。@zaph是的,盐部分指定了它,询问我保存盐的想法是否正确。回答不错。所以,说得清楚一点,我的方法是安全的,我应该部署它?@slevin-实际上一个salt应该超过10个字符。有一种广泛使用的方法,即如何储存盐。我建议找到一个现有的BCrypt/PBKDF2库,它生成一个安全的salt并生成这种未来的证明格式。回答得好。所以,说得清楚一点,我的方法是安全的,我应该部署它?@slevin-实际上一个salt应该超过10个字符。有一种广泛使用的方法,即如何储存盐。我建议找到一个现有的BCrypt/PBKDF2库,它生成一个安全的salt并生成这种未来的证明格式。