私は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です。
よろしくお願いします!