Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php salt的最小长度应该是多少?对于openssl\u random\u pseudo\u字节,它是否总是唯一的_Php_Database_Salt - Fatal编程技术网

Php salt的最小长度应该是多少?对于openssl\u random\u pseudo\u字节,它是否总是唯一的

Php salt的最小长度应该是多少?对于openssl\u random\u pseudo\u字节,它是否总是唯一的,php,database,salt,Php,Database,Salt,我正在以一种安全的方式将用户的密码存储在数据库中。我读了一点,有人建议我使用openssl_random_pseudo_字节来生成我的salt。我有: bin2hex(openssl_random_pseudo_bytes($thenumberIwanttouse, $cstrong)); 这是可行的,但我有两件事: -我的salt的长度应该是多少?在我的数据库中,如果我的salt有30个字符,例如,我只需要一个长度为30的varchar字段 -openssl_random_pseudo_字节

我正在以一种安全的方式将用户的密码存储在数据库中。我读了一点,有人建议我使用openssl_random_pseudo_字节来生成我的salt。我有:

bin2hex(openssl_random_pseudo_bytes($thenumberIwanttouse, $cstrong));
这是可行的,但我有两件事:

-我的salt的长度应该是多少?在我的数据库中,如果我的salt有30个字符,例如,我只需要一个长度为30的varchar字段


-openssl_random_pseudo_字节是否总是生成新的salt?如果不是,是否意味着我需要将我的salt与数据库中所有其他现有salt进行比较,以确保没有任何重复的salt?

salt的原始格式长度为16字节,并且不是十六进制编码的。但是,您不应该自己生成它,也不应该在数据库中有单独的salt字段

将自动生成一个salt,它会比您做得更好,然后将其存储在散列中-这就是算法的工作方式

你不应该使用密码散列和密码验证以外的任何东西来完成整个工作


此外,对于生成随机数据的openssl_random_pseudo_字节,还有更好的替代方法,例如在PHP7下,或者是旧PHP版本的后端口-软件包。

使用password_hash和password_验证它们是否是推荐的方法,不要对它们加盐,它们是自己做的。不要重新发明轮子,尤其是在这个领域,手摇安全更可能是错误的,而不是正确的实现。如果您正在生成随机字节,则不要使用varchar/text类型字段。随机字节可以/将随机包含看起来有效的unicode字符序列,而varchar/文本字段受字符集转换的约束。这可能会因为错误的字符翻译而损坏salt的字节。改为使用blob/varbinary类型的字段。我应该使用哪种类型的字段?如果密码自己散列,他们如何记住他们使用的salt?难道salt不需要在数据库中吗?记住,无线路由器安全机制WEP的组件没有问题,只是实现得很差,没有经过适当的压力测试。于是一个无用的安全机制诞生了。除非你是一名安全专家,否则不要尝试自己动手。问题是,我在读这篇文章:。在我看来,那个人真的知道我在做什么,但在php中,我所需要的只是密码散列和密码验证吗?甚至在我学习的时候,我被告知将盐存储在我的数据库中,但在这里,将盐粘贴到某个php函数。。。我怎么知道谁是真正的赖特?我不是已经在我的评论中说过了吗?没有人喜欢评论窃贼!当我发布这篇文章时,你还没有写评论。@KévinDuguay是的,在PHP下,你只需要密码\u散列和密码\u验证。你链接到的这篇文章确实是由知道自己在做什么的人写的,但它不是一篇关于如何在PHP下进行密码哈希的教程。@Narf评论21分钟前,你的帖子是11分钟前的基础数学