2016-12-04 18 views
0

Register.phpハッシュされたパスワードが文句を言わない

 $query = " 
     INSERT INTO users( 
      email, 
      pass, 
      salt 
     ) VALUES ( 
      :email, 
      :password, 
      :salt 
     ) 
    "; 

     $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
    $password = hash('sha256', $_POST['password'] . $salt); 

    for($round = 0; $round < 65536; $round++) 
    { 
     $password = hash('sha256', $password . $salt); 
    } 

    $query_params = array( 
     ':email' => $_POST['email'], 
     ':password' => $password, 
     ':salt' => $salt 
    ); 

Login.php

 if($row) 
    { 

     $check_password = hash('sha256', $_POST['password'] . $row['salt']); 
     for($round = 0; $round < 65536; $round++) 
     { 
      $check_password = hash('sha256', $check_password . $row['salt']); 
     } 

     if($check_password === $row['pass']) 
     { 
      // If they do, then we flip this to true 
      $login_ok = true; 
     } 
    } 

パスワードのログイン/ユーザ名は、これが機能しない理由を把握することはできませんので、正しいです。データベースでは、ハッシュされたパスの長さは、わからないsaltパスワードと同じです。

+4

組み込み関数 'password_hash()'と 'password_verify()'の代わりに組み込み関数を使うのはなぜですか? –

+0

まず、* salt *および* pass *列の長さがそれぞれsaltおよびhashhedパスワードを保持するのに十分な長さかどうかを確認します。次に、保存された(ハッシュされた)パスワードとログイン(ハッシュされた)パスワードが同じかどうかを手動でチェックするために 'echo $ check_password;'を実行します。 –

答えて

1

passカラムがハッシュパスワード以上の長さのvarcharであることを確認してください。保存したパスワードは保存中に切り捨てられていると思います。

+0

現時点では、私はvarchar 12としてのパスを持っていると塩は同じです – user2620804

+1

列のパスと塩のvarcharの長さは小さすぎます。 – piotr

関連する問題