2

私はこの主題についてたくさんの質問があることを知っています、しかし私は本当にこれを尋ねる必要があります。

今日、私はmd5を使用したパスワードの暗号化に取り組んでいます。

だから私がやったことはです。

私は4つの塩を手に入れました。(ユーザーの価値観によって変わります)

  1. 電子メールIDとsubstrから、次にmd5
  2. 電子メールおよびIDsubstrの他の位置から
  3. 長い文字列、それをsubstrし、次にmd5 it
  4. 別の長い文字列、それをsubstrし、次にmd5 it

次に、i md5 salt1と3、およびパスワードとsalt2とsalt4

この後、ユーザーが電子メールを変更したり、IDが変更されたりするたびに、パスワードを自動的に変更する必要があります。

これについてどう思いますか?

4

6 に答える 6

16

何もない。

MD5は壊れていて悪いです。

メールアドレスをソルトとして使用することをお勧めします。しかし、md5の使用はそうではありません。代わりにbcrypt、scryptまたはpbkdf2を使用してください。

あなたが何をしているのかを本当に知っていて、私を信頼していない限り、あなた自身の暗号を発明しないでください、あなたはしません

于 2013-01-26T14:54:35.617 に答える
8

まず、いくつかの用語を定義しましょう。

  • 暗号化とは、メッセージを読み取れないようにエンコードすることです。暗号化には、平文暗号が含まれます。本 (平文) を鍵のかかった部屋 (暗号) に入れるようなもので、既知のツール (鍵) を使用してのみ開くことができます。暗号にはいろいろな種類がありますが、簡単に説明します。暗号化は双方向です。つまり、メッセージをエンコードおよびデコードできます。

  • 暗号化ハッシュとは、あらゆる種類のデータを取得し、その固定サイズの値を生成することです (通常、ハッシュまたはダイジェストと呼ばれます)。暗号化ハッシュは一方向であるため、プロセスを元に戻すことはできません。

  • ソルトは、ノンス(一度だけ使用される一意の番号)に似た、一意の文字列またはビットの集まりです。ソルトは、クラッカーがハッシュのリストを処理できないようにするためにのみ使用されます。それらは秘密として使用されることは想定されていません (つまり、暗号化キーのように)。ソルトに関して人々が通常ランダム性について話す唯一の理由は、ユニークなソルトを生成したいからです (例えば、ランダム性が十分に大きくない場合、ソルトが衝突する可能性があります)。

さて、パスワードをハッシュする方法について説明します。

パスワードをハッシュする比較的安全な方法は、一意のハッシュをパスワードに追加し、ソルトをパスワードとともに保存することです。

$pass = 'this is my password';
$salt = uniqid('', true);
$hash = sha1($pass . $salt);
// INSERT INTO users ('hash', 'salt') VALUES ('$hash', '$salt') WHERE ...

Web サイトがユーザーから機密データを取得しない場合は、これで問題ありません。

機密データを扱う場合、またはデータを安全に保つためにできる限りのことを確実に行いたい場合は、ハッシュ化を行う PHP 関数があります。これは呼び出されcrypt()ます (どのように機能するかについては、ドキュメントを参照してください)。関数を使用してパスワードをハッシュする方法の例を次に示します。

$pass = 'this is my password';
$salt = 'unique string';
$hash = crypt($password, '$2y$07$'.$salt.'$');
echo $hash;

これにより、パスワードが安全にハッシュされます。

認識すべきことは、このcrypt()機能はあなたが思いつくよりもはるかに安全であるということです (あなたがその分野の専門家でない限り)。

PHP の新しいバージョン (5.5.0 以降) には、パスワードのハッシュをさらに簡単にするパスワード ハッシュ APIがあります。

そこにはさまざまなハッシュライブラリもあります。PHPassは人気があります。

于 2013-01-26T15:45:01.523 に答える
3

MD5を使用しているので悪いです。

MD5は非常に高速な操作です。グラフィックカードハードウェアでは、1秒間に数十億回実行できます。パスワード関連のものに使用することは悪い習慣と見なされます。

bcryptを使用します。ランダムソルトを使用してください。パスワードのハッシュ、検証、および再ハッシュには、今後のPHPAPIを使用してください。このインクルードファイルは、PHP 5.3.7以降のバージョンに実装されています:https ://github.com/ircmaxell/password_compat

于 2013-01-26T14:54:26.483 に答える
-2

私は個人的に、ユーザーIDと彼の電子メールを彼のパスワードのハッシュに含めることをお勧めしません。パスワードは次の方法で処理できます。

  • ユーザー登録時に生成されたランダムな文字列に基づくユーザーごとの動的ソルト
  • ソルトの一部を前に付け、他の部分をパスワードの周りに追加します
  • ダブルmd5:md5(md5($ password))
  • 等。
于 2013-01-26T14:54:32.613 に答える
-2

簡単な方法は、ユーザーごとにランダムなソルトを生成し、パスワードを次のようにハッシュすることです

public function encodePassword( $raw, $salt ) {
    return hash('sha256', $salt.$raw);
}

高セキュリティ ハッシュについては、PBKDF2 の実装方法を説明する次のリンクを確認できます。

http://crackstation.net/hashing-security.htm#phpソースコード

于 2013-01-26T14:59:34.570 に答える