Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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密码脚本中使用crypt允许使用额外字符的密码?_Php_Encryption - Fatal编程技术网

在php密码脚本中使用crypt允许使用额外字符的密码?

在php密码脚本中使用crypt允许使用额外字符的密码?,php,encryption,Php,Encryption,好的,我正在尝试使用PHP5.4脚本和MySQL创建一些受密码保护的网页。运行示例产生了一些意想不到的结果 我使用以下方法创建了密码: $salt = ""; $salt.=substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",mt_rand(0,63), 1); $salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy

好的,我正在尝试使用PHP5.4脚本和MySQL创建一些受密码保护的网页。运行示例产生了一些意想不到的结果

我使用以下方法创建了密码:

$salt = "";
$salt.=substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",mt_rand(0,63), 1);
$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);
$pw1 = crypt($pw,$salt);
并将$pw1存储在MySQL数据库中

然后在我的身份验证页面中,我检索了db密码,并使用表单中的用户输入来验证用户,如下所示:

get $db_pw from database then...
if (crypt($user_password,$db_pw) == $db_pw) ... proceed
所有的工作都很好,但是如果我输入一个比密码长的字符串,它仍然会通过ok。例如:如果我的密码是“stack”,如果我输入“stackoverflow”,它将通过ok。如果我输入“stac”,它将按预期停止

我试过搜索这个,但找不到类似的东西。
我做错了什么?

看起来crypt函数有一个小警告:

标准的基于DES的crypt()返回salt作为输出的前两个字符。它还只使用str的前八个字符,因此以相同八个字符开头的较长字符串将生成相同的结果(当使用相同的salt时)

因此,我假设发生的事情不会发生在“stack”和“stackoverflow”上,而是发生在例如“stackove”和“stackoverflow”上


使用
crypt()。使用PBKDF2或bcrypt代替石器时代的密码。

无法在这里重现任何问题?@bart:
crypt()
返回两个字符的盐作为加密密码的前两个字符。将加密后的字符串传递回crypt()将提取2个字符,谢谢!这就是我需要的。。。是的,看看用PHPass来代替。我听过地下室的警告。。。