2

私は自分のサイトに多かれ少なかれ安全なログイン システムを作ろうとしていますが、物事を保護するのにあまり時間がなかったので、学習しながら学んでいます。次のうちどれが優れているか、またその理由についていくつかの意見を聞きたいと思っていました。(それともどこかで間違えた?)

$staticsalt = '$%*#)$*)^A#$#543667ggfdf\#$%x';  
$random = md5(uniqid(mt_rand(), true));
$salt = hash('sha512',$random.$_POST['password'].microtime().$staticsalt);

どちらか(データベースに $salt が必要ない場合...)

$password = crypt($_POST['password'], '$2a$12$'.$salt);   

または(データベースにも $salt が必要な場合...)

$password = hash('sha512',$salt.$_POST['password']);
4

3 に答える 3

3
  1. SHA512 は非常に高速なアルゴリズムであり、通常、パスワード ハッシュ アルゴリズムにとって望ましくない属性です。
  2. microtimeソルトにランダム シードなどの予測可能な値を使用する、よりランダムな値で防げる高度な攻撃を受ける可能性があります。

パスワード ハッシュ システムの優れた既存の実装である phpass をお勧めします。
http://www.openwall.com/phpass/

于 2011-08-14T10:41:58.677 に答える
0

そのようにあなたの塩をハッシュしないでください.

cryptの Blowfish ハッシュは、22 文字の base64 でエンコードされた文字列 (文字 [./0-9A-Za-z] を使用) をソルトに使用します。これは 128 ビットのエントロピーに相当します。

ソルトの作成に使用している SHA-512 ハッシュには、512 ビットのエントロピーがあります。cryptしかし、今では 22 個の小文字と 16 進文字しか使用しないため、その 80% 以上を捨てています。これにより、派手なランダム性を生成しているにもかかわらず、約 85 ビットのエントロピーしか残りません。

85 ビットで十分な場合は、次のようにすることもできます。

$salt = str_replace("+", ".", base64_encode(md5(uniqid(mt_rand(), true), true)));

私は暗号化の専門家ではないので、128 ビットを完全に使用するソルトを生成する方法についてアドバイスするつもりはありません。

于 2011-08-14T14:16:38.480 に答える
-2

実際、これほど多くのセキュリティを宣伝しても意味がありません。システムが何のために作られているのかを知る必要があります。チャットだけなら、md5 で問題ありません。その銀行システムの場合、実際の認証システムが必要です。つまり、ソルトまたはコードジェネレーターを備えたカードの一部です。

編集:良いセキュリティポリシーが1つあるとは思いません。上の答えは素晴らしいと思いました。

于 2011-08-14T10:48:40.847 に答える