web-dev-qa-db-fra.com

Comment mediawiki enregistre-t-il les mots de passe?

J'ai mediawiki installé sur ma machine locale. J'ai dû utiliser un formulaire en dehors de wiki qui demande à l'utilisateur de télécharger des fichiers avec le nom d'utilisateur et le mot de passe du wiki. Afin d'y parvenir, j'ai parcouru la base de données et trouvé dans la table des utilisateurs un mot de passe d'utilisateur: : B: 4700e0cf: 6f650d779329f7d4de5dffe728bf30d8 qui était dans la colonne ser_password qui est - tinyblob ( a ouvert le fichier bin obtenu de la base de données et obtenu le mot de passe ci-dessus ). Donc ma question est:

Comment vérifier cela avec le mot de passe saisi par l'utilisateur dans le formulaire externe?

Sous quelle forme (cryptage) ce mot de passe est enregistré dans la base de données?

2
arshad

B dans ce mot de passe signifie que ce cryptage utilise du sel aléatoire, que md5(saltWithDash . md5(password)).

Si vous voulez vérifier la saisie de l'utilisateur avec le mot de passe de la base de données, vous devez extraire le sel du mot de passe et combiner le mot de passe de l'utilisateur avec ce sel. Ensuite, comparez ces deux hachages et, le cas échéant, le mot de passe de l'utilisateur est valide.

<?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

J'espère que cela aidera quelqu'un: C'est ainsi que mediawiki enregistre le mot de passe de l'utilisateur dans la base de données .

Veuillez consulter la réponse de @ Aleksander pour plus de détails.

2
arshad