1

重複の可能性:
PHP でパスワードをハッシュするために bcrypt をどのように使用しますか?

パスワードをMysqlデータベースに保存するための安全な方法またはハッシュ関数は何ですか? 現在、この sha1() 関数を使用して、次のコードでパスワードを DB に保存しています。それは本当に安全ですか?

<?php
$pass = 123456789;
$pass = sha1($pass);
echo $pass;
?>

アドバイスありがとうございます。

アップデート

塩はこんな感じだと思います。

$salt = "this is a salt";
$password = 'this is an password';
$hash = sha1($salt.$password);

それで、$salt値に任意の数値/乱数/何かを使用できますか? その後はNow SAFEですか?

4

3 に答える 3

0

SHA* バリアントは、パスワードのハッシュには使用しないでください。Blowfish アルゴリズムとcrypt()関数を使用します。

phpassは、これを簡素化できる PHP パスワード ハッシュ ライブラリです。

このトピックについてさらに調査を行い、 phpassライブラリを使用するのではなく、独自の Bcrypt/Blowfish 互換のソルトを生成し、 crypt()を直接使用するコードを作成することもできます。

于 2012-11-04T07:20:10.707 に答える
-2

PHP でパスワードをハッシュする最良の (そして推奨される) 方法は、crypt().

PHP ドキュメントの簡単な例を次に示します。

$hashed_password = crypt('mypassword');

// now store $hashed_password in the database

後で、入力したパスワードを確認するには (入力したパスワードであると仮定$user_inputします):

// retrieve $hashed_password from the database, then:

if (crypt($user_input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}

この例 (上記) では、パスワードが最初にハッシュされるときにソルトが自動的に生成されることに注意してください。これは危険であり、避ける必要があります。疑似ランダムソルトを提供する必要があり、次のように生成できます。

$salt = substr(str_replace('+', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 0, 22);

より良い説明については、citricsquid によってリンクされたスタック オーバーフローの質問を参照してください。

于 2012-11-04T07:23:05.290 に答える
-3

入力したパスワードと後でデータベースに保存されたパスワードを比較できないため、salt にランダムな値を使用することはできません。

暗号化は主に問題ありませんが、必要に応じて本当に夢中になることができます...

<?php
 $salt = "fF#$GGG$T@#4309g9jERGWrgrew@GH";
 $pepper = "vV@@#V90Ù39009gfjigwjorn)(";
 $pass = "123456789";
 $pass = $salt.$pass.$pepper;
 for ($i=0;$i<40;$i++){
    $pass = hash("sha256", $pass)
 }

 echo $pass;

?>

于 2012-11-04T07:22:04.773 に答える