PHP加密密码

时间:2015-03-24 14:28:53

标签: php encryption passwords

我想存储入站密码并登录数据库,然后检索它并检查用户输入的有效性。我一定误解了关于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";}
?>

首先执行测试登录和电子邮件,并插入“插入”回显。但是在第二次运行中,我有“错误的”回声,我不明白为什么。

由于

3 个答案:

答案 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";
}
?>

注意:

  1. 考虑使用mysqli_ *函数而不是mysql_ *函数,因为这些函数已被弃用。

  2. 您的代码目前受到许多安全漏洞的影响,特别是因为您的值未被转义。

  3. 将内容类型设置为text / plain是否有特殊原因?这是一个PHP脚本。