首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MD5在SQL数据库和PHP脚本中的作用不同

MD5在SQL数据库和PHP脚本中的作用不同
EN

Stack Overflow用户
提问于 2016-04-23 00:47:35
回答 1查看 1.5K关注 0票数 0

最近,我创建了一个脚本来处理登录和注册我的游戏,它使用http_get方法更新统计数据。我成功地创造了一切,但是有一个问题。当用户注册时,它会插入PHP脚本生成的不同的md5字符串,因此,我无法比较密码。

这就是我将md5字符串插入数据库的方式:

代码语言:javascript
复制
$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";
        }

这就是我检查密码的方式:

代码语言:javascript
复制
if($p['password'] == md5($password)) {
                echo "login was successful!";
            }
            else {
                echo "incorrect password";
            }

这是用户注册时数据库中的md5字符串:(未加密的字符串是: pocakaj123)。

代码语言:javascript
复制
54e8850ba5eca655854ddf1b503943

这是我echo md5($password)时生成的字符串。

代码语言:javascript
复制
54e8850ba5eca655854ddf1b50394348
EN

回答 1

Stack Overflow用户

发布于 2016-04-23 00:50:39

这是由于数据库中字段的长度所致。您需要增加长度,以使整个字符串能够适应。

目前,它只接受30个字符,因此其余字符将被截断:

代码语言:javascript
复制
54e8850ba5eca655854ddf1b503943

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

代码语言:javascript
复制
54e8850ba5eca655854ddf1b50394348

注:

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

md5()不安全的原因:

哈希算法(如MD5、SHA1和SHA256 )被设计成非常快速和高效。随着现代技术和计算机设备的发展,为了确定原始输入,对这些算法的输出“蛮力”已经变得微不足道。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36805327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档