Php MySQL SHA()不';行不通
基本上我在注册表中加密了密码,如下所示:Php MySQL SHA()不';行不通,php,mysql,hash,Php,Mysql,Hash,基本上我在注册表中加密了密码,如下所示: $query = "INSERT INTO users(first_name, last_name, email, password, username) VALUES ('$fn', '$ln', '$em', SHA('$pw1'), '$un')"; 现在密码是散列的,但当我尝试在登录脚本中使用它时,它不想工作,函数mysql\u num\u rows返回0 <?php
$query = "INSERT INTO users(first_name, last_name, email, password,
username) VALUES ('$fn', '$ln', '$em', SHA('$pw1'), '$un')";
现在密码是散列的,但当我尝试在登录脚本中使用它时,它不想工作,函数mysql\u num\u rows返回0
<?php
ob_start();
//If login button is pressed
if(isset($_POST['submitted'])){
//Username clean up
if(preg_match('%^[a-zA-Z0-9_-]{6,20}$%', stripslashes(trim($_POST['username'])))){
$u = escape_data($_POST['username']);
} else {
$u = FALSE;
echo '<p><font color="red" size="+1">Please enter valid username</font></p>';
}
//Password clean up
if(preg_match('%^[a-zA-Z0-9_-]{6,20}$%', stripslashes(trim($_POST['password'])))){
$p = escape_data($_POST['password']);
} else {
$p = FALSE;
echo '<p><font color="red" size="+1">Please enter valid password</font></p>';
}
//Check if both matched
if($u && $p){
$query = "SELECT * FROM users WHERE username='$u' AND password=SHA('$p')";
$result = mysql_query($query);
$count = mysql_num_rows($result);
$row = mysql_fetch_array($result, MYSQL_NUM);
if($count != 0){
$_SESSION['username'] = $row[1];
$_SESSION['password'] = $row[3];
header("Location: login_confirmed.php");
} else {
echo "Wrong username or password!";
}
}
}
ob_end_flush();
?>
这可能是因为您的密码字段类型。您的密码字段是
VARCHAR
?多长时间?在我看来,SHA
生成的字符串比字段允许的长度长,因此在存储时会被截断,在重新生成以进行检查时会匹配
表示需要40个字符来存储SHA
的输出
计算字符串的SHA-1 160位校验和,如中所述
RFC3174(安全哈希算法)。该值以字符串形式返回
40个十六进制数字,如果参数为NULL,则为NULL。其中一个可能
此函数用作哈希键
密码字段的类型是什么?是否检查了数据库中的插入值和检索值?警告:SHA不是加密算法!这是一个哈希算法
password
,您在列名中使用的是一个保留字,如果用作列名,可能会产生很多问题。在尝试其他操作之前,请确保已插入数据。如果需要,请使用echo
调试脚本。如果你自己解决这个问题,而不是寻求帮助,你将获得更多的利润。扩展@RussellUhl comment。散列和加密之间的区别:散列文本无法恢复(通常),而加密文本可以恢复[text=decrypt(encrypt(text))]惊人的是,它成功了。我让瓦查尔(30岁)摆好了桌子。我想不出来。非常感谢你!太神奇了。你为什么会有varchar(30岁)呢?你知道什么是varchar以及它们是如何工作的吗?我想,密码通常大约是30个字符,但我忘了SHA函数使字符串长度为40个字符。@user2564336,cf。