2014-01-29 4 views
0

Я пытаюсь использовать md5 и соль пароль так, например, имя учетной записи и stackoverflow md5 и соленого выглядит какСоль и установить новый пароль

OÜ ª€ÉظÖÙõà;~\, когда это сделано правильно, но я получаю то, что выглядит просто md5, как будто он не засовывает имя учетной записи и пароль. Так что, когда я делаю md5 хэш имени учетной записи и jade это выглядит как 0xea606b4cae6ae9a68a5da45d57c3309d, но то, что я действительно искал является

ê`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; 
    } 

У меня есть скрипт, который работает и возвращает то, что я ищу, но он использует следующую процедуру из базы данных, так что я должен сделать call changepasswd('$Login', $Salt)

BEGIN 
START TRANSACTION; 
    UPDATE users SET passwd = passwd1 WHERE name = name1; 
COMMIT; 
END 

Я сделал уведомление что $Salt находится за пределами 'single quotes', есть ли способ сделать это со следующим фрагментом?

$arr = array(":idnumber" => $new, ":passwd" => $Salt);

Я думал, что beable делать то же самое с этим PDO функции Update

// 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); 
    } 
+0

Если вы используете MD5, вы уже проиграли эту игру. MD5 не подходит для надежного хеширования паролей. – meagar

+0

Это для частного сервера, вот как игра регистрирует кого-то. – tomirons

+0

Все хэшированные парольные базы данных являются частными, вы храните хэш, так что когда кто-то * ломается на * ваш частный сервер, они не могут видеть пароли с открытым текстом. Неважно, как «частный» ваш сервер, если вы пытаетесь использовать хэш-пароли и используете MD5, вы делаете это неправильно. – meagar

ответ

0

Итак, вы хотите хэш строки и он будет производить êkL®j馊]¤]WÃ0?
MD5 не мог этого сделать, он всегда возвращает 32 символа.

Используйте другой алгоритм шифрования для создания такой строки шифрования.

+0

Я отредактировал мое оригинальное сообщение – tomirons

Смежные вопросы