1

私はphpに比較的慣れておらず、パスワードのハッシュに関しては塩のポイントを理解し始めたばかりです(私は思いますか?)。とにかく、これが私の問題です...

現在、ユーザー名、パスワード、ソルトフィールドを持つmysqlデータベースがあります。パスワードフィールドの長さは64文字、ソルトフィールドは3文字です。登録時に、各ユーザー名にランダムなソルトが割り当てられます。私はこれに問題はありません(私は信じています)。まず、ユーザーの希望するパスワードが次の方法でハッシュされます。

$hashedinput = hash ('sha256', $input);

次に、ユーザーの希望するパスワードが、次の手順でpbkdf2に含まれているソルトでハッシュされ、データベースに入力されます。

$password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64);

私の問題はログインです。データベース内のハッシュされたパスワードをユーザーが入力したパスワードと比較すると、常に!=に戻ります。ログインを検証するために私が行うことは次のとおりです。

$userData = mysql_fetch_array($search, MYSQL_ASSOC);
$inputhash = hash('sha256', $input); // From Form
$salt = $userData['salt']; // Salt from DB
$password = pbkdf2('sha256', $inputhash, $salt, 10000, 64);
$knownpassword = $userData['password']; // Known password from DB

したがって、トラブルシューティングのために、すべての出力をエコーし​​ました。これは、正しいパスワードを入力したときのように見えます(そして、ログインしません)。

入力パスワード:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6e66913e43bf60478907ca07429b0cf90c808ce2097e0544cc44d298bfb7b85ad

DBパスワード:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6

入力パスワードの最初の64文字は正しいが、合計128文字まで続くことに注意してください。DBパスワードはわずか64です。

よろしくお願いします!

4

1 に答える 1

1

Thomas Ptacekはしばらく前に素晴らしい記事を書き、ソルトとは何か、なぜそれが役立つのかを詳細に説明し、パスワードハッシュシステムに関して覚えておく必要のある一番のルールを示しました。

他人のパスワードシステムを使用してください。自分で作成しないでください。

アプリケーションでPHP5.5を使用する場合は、新しいpassword_hashAPIを使用してください。そうでない場合は、少なくともPHP 5.3を使用していることを確認し、password_hashユーザーランド互換性ライブラリを使用してください。彼らはあなたのためにこれからすべての苦痛を取り除くように設計されています。

于 2013-02-12T04:44:19.663 に答える