Php 试图散列我的密码,但没有成功

Php 试图散列我的密码,但没有成功,php,security,md5,salt,Php,Security,Md5,Salt,我对php安全性相当陌生,对于我的网站,我是一名注册和登录人员,我想添加md5密码,但我找不到任何地方有明确的指南,说明需要添加哪些内容到注册中,以及需要添加哪些内容到登录文件和/或数据库,正如我所说,我对php的web安全性相当陌生,所以我需要一些帮助,以下是我在报名表上的部分内容: $error = $user = $pass = ""; if (isset($_SESSION['user'])) destroySession(); if (isset($_POST['user']

我对php安全性相当陌生,对于我的网站,我是一名注册和登录人员,我想添加md5密码,但我找不到任何地方有明确的指南,说明需要添加哪些内容到注册中,以及需要添加哪些内容到登录文件和/或数据库,正如我所说,我对php的web安全性相当陌生,所以我需要一些帮助,以下是我在报名表上的部分内容:

    $error = $user = $pass = "";
if (isset($_SESSION['user'])) destroySession();

if (isset($_POST['user']))
{
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);


    if ($user == "" || $pass == "")
    {
        $error = "Not all fields were entered<br /><br />";
    }
    else
    {
        $query = "SELECT * FROM members WHERE user='$user'";

        if (mysql_num_rows(queryMysql($query)))
        {
            $error = "Username already taken<br /><br />";
        }
        else
        {
            $query = "INSERT INTO members VALUES('$user', '$pass')";
            queryMysql($query);
            die("<h4>Account created</h4>Please Log in.");
        }

    }
}
$error=$user=$pass=”“;
如果(isset($_SESSION['user'])destroySession();
如果(isset($_POST['user']))
{
$user=sanitizeString($_POST['user']);
$pass=sanitizeString($_POST['pass']);
如果($user==“”| |$pass==“”)
{
$error=“并非所有字段都已输入

”; } 其他的 { $query=“从用户=“$user”的成员中选择*; if(mysql\u num\u行(queryMysql($query))) { $error=“用户名已被占用

”; } 其他的 { $query=“插入成员值(“$user”,“$pass”)”; queryMysql($query); 死亡(“帐户创建请登录”); } } }

我只需要一个示例或一个很好的指南,说明我需要做什么才能使它正常工作。

您可以在插入之前使用md5($pass),当用户登录时,再次使用md5并检查值是否相同。没有办法反md5,因此您通常会根据md5 DB值检查md5输入。

我认为您正在寻找salt,然后散列您的密码。在使用MD5散列之前,只需将您选择的字符串添加到密码的前面(如果您愿意,也可以添加到末尾)

e、 g

这将使用salted MD5加密将密码存储在数据库中,该加密无法使用使用非salted MD5加密的常用密码查找表进行反转

要检查密码是否有效,请执行类似操作:

$passToCheck = 'something';
$correctMD5 = (retrieve hash from db)
if($salt.$passToCheck.$pepper == $correctMD5)
{    
   //valid login
} else {
   //login failure
}

我不做任何改动,我只是用SHA-1散列密码,这就足够了,除非NSA关注我的用户数据库,这是不可能发生的。我认为你真的应该阅读准备好的声明,进一步了解诸如条令之类的“高抽象”解决方案。@Giacomo:不。你可以在合理的时间(数小时或数天)在云中破解SHA1。密码应该总是正确地用像sha512这样的强散列函数进行加密和散列。哼,我知道。。。但是,您必须根据实际的安全需求调整您的安全顾虑。“我最喜欢的宠物论坛”!=“网上银行服务”。你不应该使用像sanitizeString()这样的函数。我同意在安全性方面超越是没有用的,但事情并不像你说的那样。md5可以颠倒过来,只要假设用户选择一个公共密码,那么如果您窃取了DB,您就可以用md5哈希检查一个广泛使用的密码列表,并知道用户最终用于其他web服务的密码是什么。不过,这并不是每天都会发生。然而,想想看,我在这里说的是真的。您需要使用数据库中的md5检查发布(登录时)密码的md5。没有办法(以编程方式)de-md5!我知道你可以在一些网站上查找流行的MD5,但这与我的评论无关。他在问如何进行……你太简单了。我太相信过多的安全性是一种麻烦和无用的,但你不能给他md5($pass)=安全的感觉。
$passToCheck = 'something';
$correctMD5 = (retrieve hash from db)
if($salt.$passToCheck.$pepper == $correctMD5)
{    
   //valid login
} else {
   //login failure
}