我想存储入站密码并登录数据库,然后检索它并检查用户输入的有效性。我一定误解了关于crypt函数的一些功能,因为我的非常简单的脚本无效。这是:
<?php
header("Content-Type: text/plain");
mysql_connect('localhost','root','') or die('Cannot connect mysql server');
mysql_select_db('ChemAlive_login') or die('cannot connect database');
$user_input='test';
$mail='test@test.com';
$password = crypt($user_input);
$q=mysql_query("select * from login where mail='".$mail."' ") or die(mysql_error());
$n=mysql_fetch_row($q);
if($n>0)
{
$q=mysql_query("select password from login where mail='".$mail."' ");
$pp=mysql_fetch_row($q);
if(crypt($user_input,$pp[0])==$pp[0]) echo "ok";
else echo "wrong";
}
else
{ $insert=mysql_query("insert into login values('".$mail."','".$password."')") or die(mysql_error());
echo "insert";}
?>
首先执行测试登录和电子邮件,并插入“插入”回显。但是在第二次运行中,我有“错误的”回声,我不明白为什么。
由于
答案 0 :(得分:0)
这会有所帮助(无法推荐足够的php.net):
http://php.net/manual/en/function.crypt.php
您可能遇到问题,因为您没有第二个参数。
<强>盐强>
用于基于散列的可选盐串。如果没有提供, 行为是由算法实现定义的,可以导致 意想不到的结果。
答案 1 :(得分:0)
你应该改变
if(crypt($user_input,$pp[0])==$pp[0])
到
if(crypt($user_input)==$pp[0])
您尝试使用$pp[0]
作为crypt函数的salt。盐是决定加密算法的因素。当您在插入的passwort上将此参数留空时,crypt函数会自动使用MD5进行加密。
答案 2 :(得分:0)
为什么要使用crypt,为什么不使用md5,或者更好的还是使用sha1?这意味着使用sha1:
重新编写代码如下<?php
header("Content-Type: text/plain");
mysql_connect('localhost','root','') or die('Cannot connect mysql server');
mysql_select_db('ChemAlive_login') or die('cannot connect database');
$user_input='test';
$mail='test@test.com';
$password = sha1($user_input);
$q=mysql_query("select * from login where mail='".$mail."' ") or die(mysql_error());
$n=mysql_num_rows($q); //not mysql_fetch_row, as that does not return count but an array
if($n>0)
{
$q=mysql_query("select password from login where mail='".$mail."' ");
$pp=mysql_fetch_row($q);
if(sha1($user_input)==$pp[0]) {
echo "ok";
}
else {
echo "wrong";
}
}
else
{
$insert=mysql_query("insert into login values('".$mail."','".$password."')") or die(mysql_error());
echo "insert";
}
?>
注意:
考虑使用mysqli_ *函数而不是mysql_ *函数,因为这些函数已被弃用。
您的代码目前受到许多安全漏洞的影响,特别是因为您的值未被转义。
将内容类型设置为text / plain是否有特殊原因?这是一个PHP脚本。