0

私はPHPログインシステムを書き直していますが、これに直面しました

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}
$salt = createSalt();
$hash = hash('sha256', $salt . $hash);

実はこれまで塩漬けを使ったことがなかったので、少し調べてみると便利でした。しかし、私の答えは、これは塩を扱う良い方法ですか?良くないでしょう$string = sha1(uniqid(mt_rand(), true))か?

そして、ハッシュの3文字だけを返すのはどうですか?本当にわかりません。

あなたが思うこと?

4

4 に答える 4

3

車輪の再発明の代わりに、PHPのcrypt()を使用することを検討してください。これは、パスワードハッシュ用に特別に設計されており、その目的に適したハッシュアルゴリズムを提供します。

于 2012-06-06T19:06:53.520 に答える
1

私はsha1またはsha256を好みます、md5は非常に時代遅れであり、sha-functionsははるかに優れています。しかし、これは私の意見です、あなたが望むものを選んでください。

この場合に本当に重要なのは塩です。ソルトは常にハッシュと一緒にプレーンテキストで保存され、レインボー/ルックアップテーブルに基づく攻撃を防ぐためにパスワードの長さを改善するために使用されます(パスワードをハッシュしたい場合は、もちろん別のものかもしれません)。これは、ブルートフォースを使用してパスワードを解読することに対する保護ではありません(md5に対しては非常にうまく機能するため、解読しにくいsha256を使用してください)。

したがって、ハッシュに32個のランダムな文字を使用する場合、またはmd5(mt_rand())のようなものを使用する場合は、まったく重要ではありません。重要なのは長さです。私は次のようなものを使用します

$hash = md5(mt_rand()) . md5(mt_rand());

md5()は、乱数に基づいて32バイトの文字列になります(mt_rand()はuniqueid()よりも優れています)。このシンペルラインを使用すると、レインボーテーブルに対してすべてのパスワードを保護する非常に「強力な」ハッシュを取得できます。

于 2012-06-06T21:28:21.893 に答える
0

私は与えられた機能に同意しませんcreateSalt()-主にあなたと同じ理由で。

これに対する私のアプローチは

define(SALT_LENGTH,32);

function createSalt()
{
  $string='';
  for ($i=0;$i<SALT_LENGTH;$i++) $string.=chr(rand(0,255));
  return $string;
}

適切なソルトはランダムなバイトシーケンスです。ハッシュするものがないため、MD5やSHA1は意味がありません。

于 2012-06-06T19:03:32.743 に答える
0

私はマスターPHPプログラマーではありませんが、ログインシステム用に同じハッシュスクリプトに取り組んできました。

GitHubに保存しています-https ://github.com/revitalagency/PHP5-Salt-Super-Admin

を使用してハッシュを作成しました...

hash_hmac('sha256', $_POST['pass'], GLOBAL_SALT);

GLOBAL_SALTは、保護を強化するためにDBではなく構成ファイルで定義されています。

于 2012-08-15T01:05:26.077 に答える