0

ソルトアンドペッパーパスワード暗号化用にこのコードを作成しました。これはパスワードを暗号化するための良い方法だと思いますが、これはどのレベルの暗号化ですか?

「ビット」の部分は使用されている文字の長さだと最初に思いましたが、それは正しくありません。これは何ビットの暗号化になりますか?

PHP

function _h() {
  $result = "";
  $charPool = '0123456789abcdefghijklmnopqrstuvwxyz';
  for($p = 0; $p<32; $p++)
    $result .= $charPool[mt_rand(0,strlen($charPool)-1)];
  return md5(sha1(md5(sha1($result))));
}

$salt = _h();
$pepper = _h();
$pass = $salt.md5($salt.md5($_POST['password']).$pepper).$pepper;

アップデート

これは暗号化ではないことを理解しているので、これが暗号化されているとは言えませんが、代わりにハッシュされています。ソルトアンドペッパーを使用したハッシュパスワードは、パスワードを保存するのに十分安全ですか?

4

2 に答える 2

3

パスワードをハッシュするスキームには、かなり多くの問題があります。

PHP 5.5には、BCryptパスワードハッシュの生成を簡素化するために、独自の関数password_hash()およびpassword_verify()が用意されています。この優れたAPIを使用するか、以前のPHPバージョンの互換性パックを使用することを強くお勧めします。使用法は非常に簡単です。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

これらの関数は、次の問題を解決します。

  1. 彼らは遅い適応可能なハッシュ関数(BCrypt)を使用します、MD5はパスワードをハッシュするには速すぎます。
  2. それらは、オペレーティングシステムのランダムなソースから安全なソルトを生成します。

コショウは単なる2番目の塩ではありません。塩とは対照的に、コショウは秘密であり、ハッシュと一緒に保存されることはありません。通常、すべてのパスワードに同じコショウが使用されます。

于 2013-03-09T22:19:03.020 に答える
1

の計算を複雑にsalt$pepprすぎても意味がありません。結局のところ、タスクはこれらのスパイスを生成するために最初に使用されたものを取得することではなく、の値をトラザーし、プレフィックス/サフィックスとしてと$_POST('a']提供します(そうでない場合は、保存された値を後で使用して、このハッシュで入力パスワードを確認することはできません)。そうは言っても、@ zneakがコメントしたように実行し、エキスパートライブラリ関数を使用してください。$salt$pepper

于 2013-03-09T17:01:02.213 に答える