ハッシュで使用するためのランダムな、長い塩を生成する方法は?
-
19-09-2019 - |
質問
ハッシュで使用するためのランダム、可変長塩を作るためのPHPでの方法は何ですか?のは、私が16文字の長塩を作りたいとしましょう - ?私はそれを行うだろうか。
正しい解決策はありません
他のヒント
編集:mcrypt拡張モジュールは廃止されました。
新しいプロジェクトのために
を見てみましょう
random_bytes(int型$長)の
そしてナトリウムの拡張(PHP 7.2コア - のように)。
あなたは単に<のhref = "HTTPを使用することができます塩を作成するdocs.php.net/mcrypt_create_iv」REL = "nofollowをnoreferrer"> mcrypt_create_iv(サイズ、ソース)の
$iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
var_dump($iv);
「文字列」の各バイトは、0〜255の間の範囲内とすることができるので、あなたはそれを取得/保存するバイナリセーフ機能を必要とします。
お使いのOSに応じて、何かます:
$fh=fopen('/dev/urandom','rb');
$salt=fgets($fh,16);
fclose($fh);
ランダムとurandomのの行動をよく読んでください。
他の人が正しくMD5と繰り返しハッシュを持ついくつかの問題は、パスワード(すなわち、比較的短い文字列)ブルートフォース攻撃に関係なく、ハッシュアルゴリズムがどのように洗練されたの同じ時間がかかりことを指摘しているが。
C
ここで私は、ランダムな文字列を生成する機能を発見されます:
/* random string */
function rand_string( $length ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
$str .= $chars[ rand( 0, $size - 1 ) ];
}
return $str;
}
良い塩のための2つの前提条件があります。それは長さでなければならない、そしてそれがランダムでなければなりません。これを達成するための多くの方法があります。あなたは、例えば、microtime
とrand
の組み合わせを使用することができますが、あなたはあなたの塩が一意であることを保証するために、さらに大きな長さに行くかもしれません。
衝突の可能性はごくわずかですが、MD5またはその他の衝突が発生しやすいのアルゴリズムを使用して塩をハッシュすると、あなたの塩が理由もなく一意である可能性を低減することを覚えておいてください。
EDIT:rand()
の代用mt_rand()
。マイケルは述べたように、それはrand
よりはましだ。