如何使用sha1()登录

时间:2015-04-24 17:02:21

标签: php mysql

我正在制作注册页面,我在注册时使用sha1()加密我的密码。我检查我的表并且密码是加密的,但是当我尝试登录时,密码被认为是无效的。我想知道是否有人可以检查它的登录代码?我知道sha1()不适合加密密码,但我还没有学到更好的加密方法,这对我们的任务来说已经足够了。

注册码:

<?php
if (!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['email'])) { 

  $username = strip_tags($_POST['username']);
  $password = strip_tags($_POST['password']);
  $email = strip_tags($_POST['email']);
  $username = mysqli_real_escape_string($db, $username);
  $password = mysqli_real_escape_string($db, $password);
  $email = mysqli_real_escape_string($db, $email);
  $passwordhash = sha1($_POST["password"]);

  $query = "SELECT COUNT(*) AS count FROM login_details WHERE Username = '".$username."'";
  $result = $db->query($query);
  $data = $result->fetch_assoc();

  if ($data['count'] > 0) {

    echo "<p>Username taken!</p>";

  } else {

    $query = "INSERT INTO login_details (Username, Password, Email) VALUES ('".$username."','".$passwordhash."','".$email."')"; 
    $result = $db->query($query);

    $query = "INSERT INTO authors (Name) VALUES ('".$username."')";
    $result = $db->query($query);

    $query = "INSERT INTO `login_profile` (`user_id`, `author_id`) SELECT `login_details`.`id`, `authors`.`id` FROM `login_details`, `authors` WHERE `login_details`.`Username` = '".$username."' AND `authors`.`Name` = '".$username."'";

    $result = $db->query($query);

    if ($result) {
      echo "<p>User registered!</p>";
    } else {
        echo "SQL Error: " . $db->error;
    }
  }
}  

&GT;

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该是一个评论,但它有点长......

这里有一些问题。

为什么要在散列之前转义密码呢?只要您在尝试验证密码时执行相同的操作,它就不会影响结果。

您应该使用salt作为哈希值,理想情况下是随机值。已经有几条评论表明sha1是不够好的#34;但是在没有盐的情况下,md5,sha1,sha256,sha3-512之间几乎没有差别......

为什么在尝试插入之前检查用户是否存在?如果您已正确配置表,如果您尝试创建已存在的用户名,则会引发重复键错误。

将理智的数据存储在两个不同的位置并保持第三个映射只是愚蠢。

至于为什么你没有显示我们的代码无效......恐怕我的水晶球眨眼了。