首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用PHP密码salt/encryption

尝试使用PHP密码salt/encryption
EN

Stack Overflow用户
提问于 2011-10-07 04:19:15
回答 2查看 282关注 0票数 0

目前,我正在开发一个应用程序,将允许在线注册。对于开发,密码检查只检查MySQL行,以确保值与输入字段中的值匹配。

下面的代码检查该行是否存在:

代码语言:javascript
复制
$res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."' AND `password` = '".$password."'");
                    $num = mysql_num_rows($res);
                    //check if there was not a match
                    if($num == 0){
                        //if not display error message
                        echo "<center>The <b>Password</b> you supplied does not match the one for that username!</center>";

我对实现salt系统感到困惑。如何更改此脚本以检查加密的密码?我还没有找到一个很好的教程来详细解释这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-07 04:31:26

盐是在加密和解密之前添加到密码开头或结尾的一组字符,以使其更难运行暴力破解攻击。

首先创建salt,它只是一个随机的、固定的字符序列,然后在散列它之前将其添加到密码中。您还应该在将数据放入查询之前对数据进行转义,以防止MySQL注入攻击。

在数据库中输入通行证时执行此操作

代码语言:javascript
复制
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['pass']);
$pass_hash = md5($SALT.$password);
mysql_query(*query to insert $username and $pass_hash into db*)

检查密码是否正确

代码语言:javascript
复制
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['pass']);
$res = mysql_query(*query to extract $pass_hash from db where username==$username)
//get the password from the $res and put it in a var
if(md5($SALT.$pass_hash_from_db) == $password){*correct pass*} else {*invalid login*}

将$SALT设置为一些大的随机静态字符串,如$SALT="WEHGFHAWEOIfjo;cewrxq#$%";

票数 2
EN

Stack Overflow用户

发布于 2011-10-07 04:22:22

如果用户注册并将其保存在数据库中,则必须生成新的salt。

代码语言:javascript
复制
// you save this in the database
$encPass = encFunction( $password.$salt );

当某个用户想要登录时,请检查此密码是否为该用户的密码列。

注意:

  • encFunction是您的加密函数
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7679985

复制
相关文章

相似问题

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