Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Salt并设置新密码_Php - Fatal编程技术网

Php Salt并设置新密码

Php Salt并设置新密码,php,Php,我尝试使用md5和salt密码,例如帐户名和stackoverflowmd5和salt看起来像 OÜ呲Ùõa~\当它正确完成时,但我得到的看起来只是md5,就像它没有添加帐户名和密码一样。因此,当我对帐户名和jade进行md5哈希时,它看起来像0xea606b4cae6ae9a68a5da45d57c309d,但我真正想要的是 ê`kL®j馊]¤]WÃ0 我无法在backticks中关闭它,因为它在e后面有一个 下面是我正在使用的代码片段作为示例 $new = isset($_PO

我尝试使用md5和salt密码,例如帐户名和
stackoverflow
md5和salt看起来像

OÜ呲Ùõa~\当它正确完成时,但我得到的看起来只是md5,就像它没有添加帐户名和密码一样。因此,当我对帐户名和
jade
进行md5哈希时,它看起来像
0xea606b4cae6ae9a68a5da45d57c309d
,但我真正想要的是

ê`kL®j馊]¤]WÃ0
我无法在
backticks
中关闭它,因为它在
e
后面有一个

下面是我正在使用的代码片段作为示例

    $new = isset($_POST['new']) ? $_POST['new'] : '';
    $old = isset($_POST['old']) ? $_POST['old'] : '';
    $con = isset($_POST['con']) ? $_POST['con'] : '';
    $this->view->usr = mysql_real_escape_string(StrToLower(Trim($this->view->usr)));
    $new = mysql_real_escape_string(StrToLower(Trim($new)));

    $Salt = $this->view->name.$new;
    $Salt = md5($Salt);
    $Salt = "0x".$Salt; //Salts the password in md5.

    //$this->view->salt = $this->view->name.$new;
    //$this->view->salt = md5($this->view->salt);
    //$this->view->salt = "0x".$this->view->salt; //Salts the password in md5.
    $this->view->msg = "";
    $this->view->err = false;

    if($old != $this->view->pss){
        $this->view->msg = "Old Password is Incorrect";
    }elseif($new == ""){
        $this->view->msg = "New Password is Empty";
    }elseif($con != $new){
        $this->view->msg = "Please Confirm Password Correctly";
    }else{
        $arr = array(":idnumber" => $new, ":passwd" => $Salt);
        $this->database->DBSet($arr,'users',$whr = 'WHERE ID = '.$this->view->usr);
        $this->view->msg = "Password is Successfully Changed";
        $this->view->err = true;
    }

我确实有一个脚本,可以运行并返回我正在查找的内容,但它使用数据库中的以下过程,因此我必须执行
调用changepasswd(“$Login”,“$Salt)

我确实注意到,
$Salt
不在
'single quotes'
的范围内,有没有办法用下面的代码片段做到这一点

$arr=array(“:idnumber”=>$new,:passwd”=>$Salt)

我想我可以用这个PDO更新函数做同样的事情

// Update
    function DBSet($arr,$tbl,$whr = ''){
        $stmt = array();
        foreach($arr as $fld => $val){
            $stmt[] =  str_replace(":","",$fld)." = ".$fld;
        }
        $stm =  implode(",",$stmt);
        $sql =  self::UPDATE.$tbl." SET ".$stm.' '.$whr;
        $sth =  $this->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $sth->execute($arr);
    }

因此,您想要散列一个字符串,它将生成
êkL®jéalphaŠ]·WÃ0

MD5不能这样做,它总是返回32个字符


使用另一种加密算法生成这样的密码字符串。

如果您使用的是MD5,那么您已经输掉了这场游戏。MD5不适用于安全地散列密码。它适用于私有服务器,这是游戏登录某人的方式。所有散列密码数据库都是私有的,您存储散列,以便当有人闯入您的私有服务器时,他们看不到纯文本密码。不管你的服务器有多“私密性”,如果你试图散列密码并且使用MD5,那么你是做错了。你不理解我,这是为了一个需要用MD5散列和盐析的游戏。所以这是为了其他人的游戏(在这种情况下,他们强制使用MD5?),而不是你自己的游戏?
// Update
    function DBSet($arr,$tbl,$whr = ''){
        $stmt = array();
        foreach($arr as $fld => $val){
            $stmt[] =  str_replace(":","",$fld)." = ".$fld;
        }
        $stm =  implode(",",$stmt);
        $sql =  self::UPDATE.$tbl." SET ".$stm.' '.$whr;
        $sth =  $this->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $sth->execute($arr);
    }