2

始める前に、多くのユーザーがそうであるように、この話題をもう一度持ち出したことをお詫びしたいと思います。ここで本当に役立つ何かを思いつくことを願っています。

md5 または sha1 は悪い習慣と見なされているため (ソルトを使用している場合でも???)、パスワードをハッシュするためにこの関数を作成しようとしました

$password = $_POST['password']; // lets say that my password is: my_sercretp@ssword123
function encrypt_the_password($password){
    $salt = "lorem_ipsumd0l0rs1t@m3tc0ns3ct3tur@d1p1sc1ng3lit";
    return hash('sha256', $salt.$password);// can use also different algorithm like sha512 or whirlpool
}
$hashed_password = encrypt_the_password($password);

これは、私が 1 人のユーザーしかいない個人の Web サイトで使用していることに注意してください。複数のユーザーがいる場合、次のようなものを考え出します。

$password = $_POST['password'];
function generate_salt() {
    $salt = uniqid(md5("lorem_ipsumd0l0rs1t@m3tc0ns3ct3tur@d1p1sc1ng3lit".microtime()));
    $salt = hash('sha256', $salt);// can use also different algorithm like sha512 or whirlpool
    return $salt;
}
function encrypt_the_password($password,$salt){
   return hash('sha256', $salt.$password);// can use also different algorithm like sha512 or whirlpool
}
$hashed_password = encrypt_the_password($password,generate_salt());

これは(それぞれのケースで)十分に安全ですか、それとももっと改善できますか???


私の編集: crypt() 関数を使用して何か新しいものを考え出そうとしました。admin というユーザーが 1 人しかいないサイトの場合のコードは次のとおりです。

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

複数のユーザーがいるサイトの場合:

$password = $_POST['password'];
function generate_salt() {
        $salt = uniqid(sha1("L0r3mIpsUmD0l0rS1tAm3tc0ns3CT3tur4d1p1sc1ng3lit".microtime()));
        $salt = substr(sha1($salt), 0, 22);
        return $salt;
}
$hashed_password = crypt($password', '$2a$12$' . generate_salt()); 

これは大丈夫ですか、それとも改善が必要ですか???

4

2 に答える 2

6

独自のアルゴリズムを作成しないことで改善します。あなたのソルトは定数であり、SHA256 の 1 回の反復でしかハッシュしないため、アルゴリズムは安全ではありません。これは計算コストが低くなります。

代わりに、Bcryptを使用します。これは、計算コストが高く、何をしているのかを知っている人によって検証されているため、ソリューションよりもはるかに安全です。

于 2013-03-29T08:38:42.050 に答える
3

PHP 5.5 に組み込まれるパスワード関数を使用する必要があります。以前のバージョンの PHP で機能を提供できる ircmaxell によるフォールバック ライブラリがあります: https://github.com/ircmaxell/password_compat

利用可能な最新のハッシュ技術を常に使用し、場合によってはレコードを更新します。このライブラリに付属する README を必ずお読みください。

独自のハッシュ関数を作成しないでください。

于 2013-03-29T08:38:07.313 に答える