1

I am salting newly created passwords before hashing them with an encryption algorithm. I generate my salts using a random number function.

Are you compromising security if your salts are only comprised of numbers (with no letters) or does this make no difference at all?

4

1 回答 1

1

盐应该是唯一的(理想情况下适用于世界上的每个密码),并且不可预测。使用确定性计算机可以做的最好的事情是获取一个随机数,并希望返回的值几乎是唯一的。因此,您拥有的可能组合越多,盐独特的机会就越大。

一些散列算法定义了一个数字和一个可接受字符的字母表。例如,PHP 的 BCrypt 需要一个包含 22 个字符的盐:

./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

您可以获得最可能的组合,使用字母表中的所有字符,而不仅仅是字符 0-9。当然,带有小字母(0-9)的较长盐可以具有与带有大字母(0-9,az,...)的较短盐一样多的组合。

为了简短起见,请使用所有可能的字符,以及散列算法期望的尽可能多的字符。

PS:如果你使用像 BCrypt 这样的密钥派生函数(你真的应该),那么你不能在散列之前对密码进行加盐,而是必须将加盐传递给散列函数。

于 2013-01-08T21:41:17.537 回答