2017-10-11 19 views
-2

私はアプリケーションをlocalhostに接続するためにPHPコードを使用しています。私のアプリケーション登録とログインはすでに成功していますが、パスワードに塩を追加したいと思います。だから私はこのリンクに従う:https://www.youtube.com/watch?v=WwxAyiAtrbM私のアプリケーションのユーザーのパスワードで塩を実装するが、私が追加した後、アプリケーションはユーザーを登録することはできません。なぜ登録できないのかわかりません。フィードバックが得られたら幸いです。以下は私のPHPコードです:これは、あなたの質問に直接答えではありませんがパスワードで塩を追加

<?php 

class DbOperations{ 

    private $con; 

    function __construct(){ 

     require_once dirname(__FILE__).'/DbConnect.php'; 

     $db = new DbConnect(); 

     $this->con = $db->connect(); 

    } 
    public function encrypt($string, $key){ 
     $string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB))); 
    } 
    public funtion decrypt($string, $key){ 
     $string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB)); 
    } 
    public funtion hashword($string, $salt){ 
     $string = crypt($string, '$P$' .$salt . '$'); 
    } 

    /*CRUD -> C -> CREATE */ 

    public function createUser($user_login, $user_pass,$user_email, $user_registered){ 
     if($this->isUserExist($user_login,$user_email)){ 
      return 0; 
     }else{ 
      $password = hashword($password, $salt); 
      $stmt = $this->con->prepare("INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`,`user_email`,`user_registered`) VALUES (NULL, ?, ?, ?, ?);"); 
      $stmt->bind_param("ssss",$user_login,$user_pass,$user_email,$user_registered); 

      if($stmt->execute()){ 
       return 1; 
      }else{ 
       return 2; 
      } 
     } 
    } 

    public function userLogin($user_login, $user_pass){ 
     $user_pass = md5($user_pass); 
     $stmt = $this->con->prepare("SELECT ID FROM wp_users WHERE user_login = ? AND user_pass = ?"); 
     $stmt->bind_param("ss",$user_login,$user_pass); 
     $stmt->execute(); 
     $stmt->store_result(); 
     return $stmt->num_rows > 0; 
    } 

    public function getUserByUsername($user_login){ 
     $stmt = $this->con->prepare("SELECT * FROM wp_users WHERE user_login = ?"); 
     $stmt->bind_param("s",$user_login); 
     $stmt->execute(); 
     return $stmt->get_result()->fetch_assoc(); 
    } 


    private function isUserExist($user_login, $user_email){ 
     $stmt = $this->con->prepare("SELECT ID FROM wp_users WHERE user_login = ? OR user_email = ?"); 
     $stmt->bind_param("ss", $user_login, $user_email); 
     $stmt->execute(); 
     $stmt->store_result(); 
     return $stmt->num_rows > 0; 
    } 

} 
?> 
+1

パスワードを暗号化して確認するために[password_hash](http://php.net/manual/en/function.password-hash.php)を使用してください。 – DarkBee

+0

はなぜ塩を追加しますか?あなたはこれで生きていくつもりならば、これであなたの時間を無駄にしていることに気づくでしょう。これは教育目的ですか? –

+0

@ Fred-ii-これはクライアントショップアプリ用です、今私の上司は私にワードプレスのwoocommerceで私のアプリケーションのログインを接続したい、私は成功ワードプレスと私のアプリケーションを接続し、私のユーザー情報はワードプレスでwpユーザーに送信されますMD5として設定します。しかし、私のユーザーがワードプレスでアカウントを登録すると、パスワードは$ P $ Bにハッシュされるので、私はこれらのパスワードで自分のアプリにログインできません。 –

答えて

2

、私は強くあなたがpassword_hashpassword_verifyを使用するように実装を書き換えるへのアドバイスです。これらのメソッドはをセキュアにしており、非常に使いやすいです。あなたは自分の塩を指定する必要はありません。なぜならアルゴリズムがあなたのために指定するようにする方が安全だからです!

は、あなたがこの方法を使用する場合は、SQLクエリを実行することができませんことを

$is_correct_password = password_verify($raw_user_password, $hashed_password_from_db); 

注意を確認

$hash = password_hash($raw_user_password); 

をハッシュこの

のようにそれを使用しますフォーマットはWHERE user_login = ? AND user_pass = ?です。 WHERE user_login = ?を実行して結果を取得し、user_passの値にpassword_verifyメソッドを実行する必要があります。これは現在の実装よりはるかに安全です。

関連する問題