我正在制作注册页面,我在注册时使用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;
谢谢!
答案 0 :(得分:0)
这应该是一个评论,但它有点长......
这里有一些问题。
为什么要在散列之前转义密码呢?只要您在尝试验证密码时执行相同的操作,它就不会影响结果。
您应该使用salt作为哈希值,理想情况下是随机值。已经有几条评论表明sha1是不够好的#34;但是在没有盐的情况下,md5,sha1,sha256,sha3-512之间几乎没有差别......
为什么在尝试插入之前检查用户是否存在?如果您已正确配置表,如果您尝试创建已存在的用户名,则会引发重复键错误。
将理智的数据存储在两个不同的位置并保持第三个映射只是愚蠢。
至于为什么你没有显示我们的代码无效......恐怕我的水晶球眨眼了。