web-dev-qa-db-ja.com

mediawikiはどのようにパスワードを保存しますか?

ローカルマシンにmediawikiがインストールされています。 wikiのユーザー名とパスワードを使用してファイルをアップロードするようユーザーに求めるwikiの外部のフォームを使用する必要がありました。これを実現するために、データベースを調べて、ユーザーテーブルにユーザーのパスワードを見つけました::B:4700e0cf:6f650d779329f7d4de5dffe728bf30d8これはuser_password 列であるtinyblobdbから取得したbinファイルを開き、上記のパスワードを取得しました)。だから私の質問は:

ユーザーが外部フォームに入力したパスワードでこれを確認するにはどうすればよいですか?

このパスワードはどのような形式(暗号化)でデータベースに保存されますか?

2
arshad

このパスワードの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
        }
?>
2
Aleksandar

これが誰かの助けになることを願っています: mediawikiがデータベースにユーザーパスワードを保存する方法です

詳細については、@ Aleksanderの回答を参照してください。

2
arshad