最近我创建了一个脚本来处理登录和注册我的游戏,该脚本使用http_get方法来更新统计信息。我已经设法成功地创建了所有内容,但是存在一个问题。当用户注册时,它会插入PHP脚本生成的不同md5字符串,因此,我无法比较密码。
这是我将 md5 字符串插入数据库的方式:
$pw = md5($password);
$insert = mysqli_query($connect, "INSERT INTO Accounts (username, password, email,reg_ip, wins, looses, experience) VALUES ('$username', '$pw', '$email', '$reg_ip', '0','0', '0')");
if($insert) {
echo "account successfully created";
}
else {
echo "error";
}
这是我检查密码的方式:
if($p['password'] == md5($password)) {
echo "login was successful!";
}
else {
echo "incorrect password";
}
这是用户注册时数据库中的 md5 字符串:(未加密的字符串是:pocakaj123)
54e8850ba5eca655854ddf1b503943
这是我echo md5($password)
时生成的字符串.
54e8850ba5eca655854ddf1b50394348
这是由于
数据库中字段的长度。您需要增加长度,以便整个字符串可以容纳。
目前,它只接受 30 个字符,因此其余字符将被截断:
54e8850ba5eca655854ddf1b503943
您需要将长度增加到至少 32 以适合整个字符串:
54e8850ba5eca655854ddf1b50394348
注意:
md5()
不是散列密码的安全方法,更好的方法是bcrypt()
或使用PHP的密码散列函数,password_hash()
。
md5()
不安全的原因:
MD5、SHA1 和 SHA256 等哈希算法被设计得非常快速和高效。随着现代技术和计算机设备的出现,为了确定原始输入,"蛮力"这些算法的输出变得微不足道。
引用自 http://php.net/manual/en/faq.passwords.php。