0

最近我创建了一个脚本来处理我的游戏的登录和注册,它使用 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
4

1 回答 1

6

这是由于数据库中字段的长度。您需要增加长度,以便整个字符串可以适合。

目前,它只接受 30 个字符,所以剩余的会被截断:

54e8850ba5eca655854ddf1b503943

您需要将长度增加到至少 32 以适应整个字符串:

54e8850ba5eca655854ddf1b50394348

笔记:

md5()散列密码不是一种安全的方法,更好的方法是bcrypt()使用 PHP 的密码散列函数,password_hash().

md5()不安全的原因:

诸如 MD5、SHA1 和 SHA256 之类的散列算法被设计为非常快速和高效。借助现代技术和计算机设备,“蛮力”这些算法的输出以确定原始输入已变得微不足道。

引用自http://php.net/manual/en/faq.passwords.php

于 2016-04-23T00:50:39.070 回答