salt 的最小长度应该是多少,并且它总是唯一的 openssl_random_pseudo_bytes
What should be the minimum length of a salt and is it always unique with openssl_random_pseudo_bytes
我正在努力以安全的方式将我的用户密码存储在我的数据库中。我读了一点,我被建议使用 openssl_random_pseudo_bytes 来生成我的盐。我愿意:
bin2hex(openssl_random_pseudo_bytes($thenumberIwanttouse, $cstrong));
它有效,但我在徘徊两件事:
-我的 salt 和数据库中的长度应该是多少,例如,如果我的 salt 有 30 个字符,我只需要一个长度为 30 的 varchar 字段?
-openssl_random_pseudo_bytes 会一直生成新的盐吗?如果不是,是否意味着我需要将我的盐与数据库中所有其他现有盐进行比较,以确保没有重复的盐?
salt 的原始格式长度为 16 个字节,不是 hex-encoded。 但是,你不应该自己生成它,也不应该在数据库中有一个单独的盐字段!
password_hash() 会自动生成一个盐(它会比你做得更好),然后将它存储在 哈希本身 - 这就是算法有效。
除了 password_hash()
和 password_verify()
之外,您不应该使用任何东西来使整个事情正常进行。
此外,还有openssl_random_pseudo_bytes()
更好的替代方法来生成随机数据,例如random_bytes() under PHP7, or it's backport for older PHP versions - the random_compat包。
我正在努力以安全的方式将我的用户密码存储在我的数据库中。我读了一点,我被建议使用 openssl_random_pseudo_bytes 来生成我的盐。我愿意:
bin2hex(openssl_random_pseudo_bytes($thenumberIwanttouse, $cstrong));
它有效,但我在徘徊两件事:
-我的 salt 和数据库中的长度应该是多少,例如,如果我的 salt 有 30 个字符,我只需要一个长度为 30 的 varchar 字段?
-openssl_random_pseudo_bytes 会一直生成新的盐吗?如果不是,是否意味着我需要将我的盐与数据库中所有其他现有盐进行比较,以确保没有重复的盐?
salt 的原始格式长度为 16 个字节,不是 hex-encoded。 但是,你不应该自己生成它,也不应该在数据库中有一个单独的盐字段!
password_hash() 会自动生成一个盐(它会比你做得更好),然后将它存储在 哈希本身 - 这就是算法有效。
除了 password_hash()
和 password_verify()
之外,您不应该使用任何东西来使整个事情正常进行。
此外,还有openssl_random_pseudo_bytes()
更好的替代方法来生成随机数据,例如random_bytes() under PHP7, or it's backport for older PHP versions - the random_compat包。