IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mot de passe PHPBB - code php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2025
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2025
    Messages : 13
    Par défaut Mot de passe PHPBB - code php
    Bonjour.
    Je dois intégrer des nouveaux membres (environ 1500) dans un forum PHPBB (logiciel open source de gestion de forum). Je dispose d'une table avec l'ID du membre, le mot de passe en clair et d'un champs password vide dans lequel je dois mettre le mot de passe hash avec autant de ligne que de membres.

    Dans la table PHPBB des users les mots de passe sont "hash" en argon2id (méthode de hash).

    Pour exemple voici ce que donne un champ user_password : $argon2id$v=19$m=65536,t=4,p=2$dGsxbVNFZ2M3bE5ZUGM1Lw$i6FsJaZK/Z32ACpWnjZ8xnnpuTV8YfPktsis8oy/aeU
    On voit que le champ contient au début la méthode de hash et les paramètres qui suivent (v=19 m=65536 t=4 p=2)
    Pour tester la méthode de hash voici un lien : https://argon2.online/

    Dans le pack PHPBB il y a un répertoire avec des fichiers php pour la gestion des mots de passe. Je voudrais utiliser ce code php pour générer automatiquement les mots de passe. Voici 2 modules en php qui je pense pourraient me servir mais je n'y comprend rien et je n'ai aucune idée de comment les utiliser.
    Voici le fichier convert_password.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    /**
    *
    * This file is part of the phpBB Forum Software package.
    *
    * @copyright (c) phpBB Limited <https://www.phpbb.com>
    * @license GNU General Public License, version 2 (GPL-2.0)
    *
    * For full copyright and license information, please see
    * the docs/CREDITS.txt file.
    *
    */
     
    namespace phpbb\passwords\driver;
     
    class convert_password extends base
    {
    	const PREFIX = '$CP$';
     
    	/**
    	* {@inheritdoc}
    	*/
    	public function get_prefix()
    	{
    		return self::PREFIX;
    	}
     
    	/**
    	* {@inheritdoc}
    	*/
    	public function hash($password, $user_row = '')
    	{
    		return false;
    	}
     
    	/**
    	* {@inheritdoc}
    	*/
    	public function check($password, $hash, $user_row = array())
    	{
    		return false;
    	}
    }
    Voici le fichier argon2id.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    /**
    *
    * This file is part of the phpBB Forum Software package.
    *
    * @copyright (c) phpBB Limited <https://www.phpbb.com>
    * @license GNU General Public License, version 2 (GPL-2.0)
    *
    * For full copyright and license information, please see
    * the docs/CREDITS.txt file.
    *
    */
     
    namespace phpbb\passwords\driver;
     
    class argon2id extends argon2i
    {
    	/**
    	* {@inheritdoc}
    	*/
    	public function get_algo_name()
    	{
    		return 'PASSWORD_ARGON2ID';
    	}
     
    	/**
    	* {@inheritdoc}
    	*/
    	public function get_prefix()
    	{
    		return '$argon2id$';
    	}
    }
    Je connais un peu php, surtout pour exécuter des requètes SQL mais pas assez pour comprendre ce code. Si vous avez besoin d'autres éléments pour m'aider je suis à votre disposition.

    D'avance merci et bonne fin de journée.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 703
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 703
    Par défaut
    j'ai l'impression que le plus gros du calcul du hachage se fait dans la classe suivante :
    https://github.com/phpbb/phpbb/blob/...ds/manager.php
    mais ça a l'air d'utiliser plusieurs classes donc ce n'est pas évident à utiliser.

  3. #3
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 463
    Par défaut
    Bonjour,

    Pour générer la clé de hachage des mots de passe, ne peux tu pas simplement utiliser la fonctions php password_hash() avec la constante PASSWORD_ARGON2ID pour utiliser l'algorithme Argon2id ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $users = [
        'pseudo1' => 'password1',
        'pseudo2' => 'password2',
    ];
     
    foreach ($users as $pseudo => $password) {
        $hash = password_hash($password, PASSWORD_ARGON2ID);
     
        echo $pseudo . ' - hash : ' . $hash . "\n";
    }

  4. #4
    Invité de passage
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2025
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2025
    Messages : 13
    Par défaut
    Bonjour et merci Pytet.

    Je vais essayer le code que tu m'as donné et en fonction du résultat je vous dirais.

    J'ai pas mal regardé à droite et à gauche pour solutionner mon problème mais ce n'est pas évident. Utiliser la fonction password_hash en passant l'algo argon2id est certainement la solution.
    Mais je me pose la question des paramètres a passer pour l'algorithme. A savoir ce qui se trouve au début du password encodé que j'ai donné en exemple : $argon2id$v=19$m=65536,t=4,p=2$
    Après pas mal de tests v=19 ne change jamais.
    Dans mon cas et pour les autres paramètres c'est :
    m=65536 Mémoire allouée
    t=4 Time cost (par défaut 4)
    p=2 thread (par défaut 2)
    De plus il y a le sel (ou salt) qui est la clé ayant servi à l'encodage (ou générée par l'encodage ?). Je dois sauvegarder ce sel dans la base de données PHPBB.

    Donc mes questions :
    Je passe comment les paramètre de l'algorithme utilisé (argon2id) quand j'appelle la fonction password_hash.
    Comment je récupère le sel (salt) une fois le hachage effectué pour l'écrire dans la bdd en même temps que le password haché.

    Encore merci pour votre aide.

  5. #5
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 463
    Par défaut
    Les options peuvent être passées en 3ème paramètre de password_hash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    $options = [
        'memory_cost' => 65536,
        'time_cost' => 4,
        'threads' => 2
    ];
     
    $users = [
        'pseudo1' => 'password1',
        'pseudo2' => 'password2',
    ];
     
    foreach ($users as $pseudo => $password) {
        $hash = password_hash($password, PASSWORD_ARGON2ID, $options);
     
        echo $pseudo . ' - hash : ' . $hash . "\n";
    }
    Le salt est automatiquement généré et intégré dans le résultat de password_hash(), tu n'as pas besoin de le récupérer pour le stocker séparément.

  6. #6
    Invité de passage
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2025
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2025
    Messages : 13
    Par défaut
    Merci beaucoup Pytet, ça marche impeccablement. J'ai même vérifié avec password_verify (le salt est bien dans le mot de passe haché).

Discussions similaires

  1. probleme de mot de passe sous easy php 2.0B1
    Par ELVIRA dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 29/11/2007, 05h57
  2. [phpBB] Code PHP non interprété dans un thème subsilver
    Par killpilot dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/06/2007, 12h42
  3. [Système] Changer un mot de passe unix via PHP
    Par gordon00 dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2007, 18h11
  4. mot de passe sur code VBA
    Par Cupidon dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/02/2007, 16h05
  5. [Sécurité] Crypter un mot de passe UNIX avec PHP
    Par dom78 dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2006, 20h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo