2010-12-28 11 views
0

私は現在、私のユーザー登録コードをチェックしています。私が今注目している部分は、パスワードのハッシュ部分です。関数を一度ロードして変数に格納するにはどうすればよいですか?

私が行うのは、configファイルからstatic_saltを取得し、mt_rand()を使ってdynamic_saltを生成することです。私がやりたいことは、このdynamic_saltをデータベースに保存することです。

dynamic_salt()メソッドをcreateメソッドに渡してデータベースのテーブルのsaltカラムに送信すると、メソッドが再び実行され、myメソッドで生成されたものとは異なる結果が作成されますhashed()メソッド

私が達成しようとしていることを達成する最良の方法は、可能ならば私に例を教えてください。

public function create() { 

       $dbcolumn->password = $this->hashed(); 
       $dbcolumn->salt = $this->dynamic_salt; 
       $this->db->insert('users', $dbcolumn); 

    } 

public function dynamic_salt() { 

      $get_dynamic_salt = mt_rand(); 
      return $get_dynamic_salt; 
} 

public function hashed() { //hashing method, that also makes 
      // sha1 and salt password 
      $static_salt = $this->config->item('encryption_key'); //grab static salt from config file 
      $dynamic_salt = $this->dynamic_salt(); 

     $password = $this->encrypt->sha1($this->input->post('password')); //encrypt user password 
      $hashed = sha1($dynamic_salt . $password . $static_salt); 

      return $hashed; 
} 
+0

は$ dbcolumn-> salt = $ this-> dynamic_saltを編集しました。 – LondonGuy

+0

私は動的塩を使わないように言われていて、データベースに塩を保存するのは危険です。 – LondonGuy

+0

'$ dbcolumn-> salt = $ this-> dynamic_salt();'なぜこのすべてを使用するのでしょうか?なぜ単にmd5を使用してパスワード(英数字、min_lengthなど)に制限を設定するのではなく、[CI](http://codeigniter.com/user_guide/libraries/form_validation.html)を使用しているので、 )!! – ifaour

答えて

2

ダイナミックソルトを使用しないことをお勧めします。これは、アプリケーションの柔軟性を低下させ、現在のフォームでは機能しない可能性が高いためです。

saltの目的は、ユーザーデータベースを取得した場合に誰かが行うことができるようにすることです。dictionary attacksその点で、静的な塩は、あなたのアプリケーションに実装するのは間違いなく良いアイデアです。

各ユーザーにダイナミックソルトを追加すると、ダイナミックソルトとユーザーのパスワードのハッシュバージョンを取得するためにデータストアにヒットしなければならないことになり、CPU集中ハッシュ関数を実行する必要があります、2回 - あなたは安全性が低く、衝突を起こしやすいハッシュをハッシュしています)。

単純な既知の静的なsaltとハッシュされたパスワードを使用すると、アプリケーションが大きくなる場合は、memcacheのようなキー/値ストレージシステムを使用できます。ユーザーIDをキーとして保存し、ユーザーがパスワードをハッシュ値として使用すると、軽量化された高速認証システムが実現します。

+0

ありがとう、それはまさに他の男が私に言ったものです。ハッカーを混乱させるために、データベースにランダムに生成された偽の偽のデータを保存することはありますか?それとも単に空間と時間を無駄にしているのでしょうか? public function my_salt(){ //塩を生成する $ my_salt = random_string( 'alnum'、32); return $ my_salt; } – LondonGuy

+0

ダイナミックな塩で何かをするのはおそらく時間の無駄でしょう。攻撃者が静的なsaltとユーザーの両方のパスワードを取得できたとしても、ユーザーは元のパスワード(または同じハッシュを生成するパスワード)を明らかにするために、無差別なパスワードクラッキングのプロセスを経なければなりません。 –

1

これを試してみてください:dyn_saltインスタンス変数がすでに存在していない

public function dynamic_salt() { 
    if(!isset($this->dyn_salt)) 
     $this->dyn_salt = mt_rand(); 
    return $this->dyn_salt; 
} 

場合、それは他のそれだけで前の値を返します、mt_rand()のそれに結果を代入します。

関連する問題