12

現在のプロジェクトで Code Igniter を使用しています。

現在、私はパスワードのハッシュにMD5を使用していますが、多くの場所で、MD5 を使用することはお勧めできません。

何を持って行けばいいですか?

  1. を使う
  2. または、bcryptを使用する必要があります

また、bcryptが推奨されている場合、Code Igniter でそれを使用するにはどうすればよいですか?

編集

これらのファイルを入れましたapplication/libraries

  1. PasswordHash.php
  2. c/メイクファイル
  3. c/crypt_private.c

私のコントローラーでは、このコードを使用しています-

$params = array(
       'phpass_hash_strength' => 8,
           'phpass_hash_portable' => FALSE
       );
$this->load->library('PasswordHash', $params);
$password = $this->passwordhash->HashPassword($pwd);

これらのエラーが発生しています -

A PHP Error was encountered

Severity: Notice

Message: Uninitialized string offset: 3

Filename: libraries/PasswordHash.php

Line Number: 116

A PHP Error was encountered

Severity: Warning

Message: strpos() [function.strpos]: Empty delimiter

Filename: libraries/PasswordHash.php

Line Number: 116

アップデート

を削除し、 SimpleLoginSecurePasswordHash.phpを使用しています。

4

3 に答える 3

16

bcrypt を使用します。この議論は、私の回答へのコメントでここに出てきました。phppassなどのライブラリを使用して、パスワードの暗号化を本当に簡単にすることができます。

塩の件。これを使って!それ以外の場合は、誰かがこのサイトにアクセスして、平均的なユーザーが選択するパスワードの大部分をカバーするレインボー テーブルをダウンロードできます。特に、ここ数か月のすべてのセキュリティ リークを考えると、今はランダム ソルトのように実装が簡単なものを使用しないと言っている場合ではありません。

アップデート

CI で PHPPass を使用するには、上記のリンク先の phppass Web サイトからファイルをダウンロードして抽出します。PasswordHash.php ファイルを CI アプリケーション/ライブラリ ディレクトリに配置します。

コードでは、次の方法でライブラリをロードします。$this->load->library('PasswordHash',array(8, FALSE));

パスワードのハッシュは次のように簡単です$this->PasswordHash->HashPassword($password);

後でパスワードが正しいかどうかを確認するには、次のように簡単です。

$password = $_POST['password'];
$actualPassword = /*Get the hashed password from your db*/;

$check = $this->PasswordHash->CheckPassword($password, $actualPassword);

このデモはhttp://dev.myunv.com/articles/secure-passwords-with-phpass/から取得しました。これにより、より多くの情報が得られます。includeそのチュートリアルを少し変更して、CI のローダーを利用するようにしました。そのため、 ornewステートメントは必要ありません。

于 2011-08-12T19:01:07.590 に答える
5

md5()使いやすいのになぜ使うのsha1()か?

また、パスワードをソルトすると、レインボーテーブル攻撃の脅威が効果的に除去されるため、常に良い考えです。

私の経験では、ソルトされたSHA1ハッシュは、Webアプリケーションの状況の99%に対して十分に安全です。

于 2011-08-12T18:48:50.590 に答える
3

Code Igniter は、この質問がされた時点から変更されました。しかし、CI の広範なドキュメントに出くわしたり、これまでにこれを見たことがない人のために、CI には、PHP の Mcrypt ライブラリを使用して双方向のデータ暗号化を提供する暗号化クラスがあります。

以下を使用してクラスを初期化した後:

$this->load->library('encrypt');

次のように暗号化できます。

$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);

次のように復号化します。

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);

CI には、デコード不可能な一方向ハッシュもあります。

$hash = $this->encrypt->sha1('Some string');

詳細については、http: //www.codeigniter.com/user_guide/libraries/encryption.htmlを参照してください。

于 2015-01-06T03:33:17.310 に答える