ローカルマシンにmediawikiがインストールされています。 wikiのユーザー名とパスワードを使用してファイルをアップロードするようユーザーに求めるwikiの外部のフォームを使用する必要がありました。これを実現するために、データベースを調べて、ユーザーテーブルにユーザーのパスワードを見つけました::B:4700e0cf:6f650d779329f7d4de5dffe728bf30d8これはuser_password 列であるtinyblob(dbから取得したbinファイルを開き、上記のパスワードを取得しました)。だから私の質問は:
ユーザーが外部フォームに入力したパスワードでこれを確認するにはどうすればよいですか?
このパスワードはどのような形式(暗号化)でデータベースに保存されますか?
このパスワードのB
は、この暗号化がmd5(saltWithDash . md5(password))
よりもランダムなソルトを使用することを意味します。
データベースのユーザー入力とパスワードを確認する場合は、パスワードからソルトを抽出し、ユーザーパスワードとそのソルトを組み合わせる必要があります。次に、この2つのハッシュを比較し、一致する場合、ユーザーパスワードは有効です。
<?php
$password = 'password'; // user input
$storedPassword = ':B:838c83e1:e4ab7024509eef084cdabd03d8b2972c'; // password from database, password is "password" (without quotes).
//extract salt from password
$salt = explode(':', $storedPassword);
// salt is stored in $salt[2], use print_r($salt) to check
$hashUserPassword = ':B:' . $salt[2] . ':' . md5($salt[2] . '-' . md5($password)); // hashing user password in same method as wikimedia, hash will be the same as password from database
//compare this two passwords
if ($storedPassword === $hashUserPassword) {
// Log user
} else {
// Wrong password
}
?>
これが誰かの助けになることを願っています: mediawikiがデータベースにユーザーパスワードを保存する方法です 。
詳細については、@ Aleksanderの回答を参照してください。