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

PHP & Base de données Discussion :

Encodage avec Mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut Encodage avec Mysql
    Bonjour,

    J'ai un problème avec la migration de mon application en PHP7.

    Je stocke dans ma BDD un mot de passe chiffré que je déchiffre plus tard pour envoyé a un webService (l'enregistrement n'est que temporaire, juste le temps que l'utilisateur valide son mail).

    En PHP 5.6, ça fonctionne correctement.
    Par contre en PHP7, le mot de passe chiffré que j'envoie à la BDD n'est pas le même quand je le récupère. Je pense a un problème d'encodage, mais ma BDD est la même du moins en schéma (encodage identique).

    Sur un VM j'ai PHP 5.6 avec mysql 14.14, sur l'autre PHP7 avec mysql 15.1.

    Voici la connexion à la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $di->set(
        'db', 
        function () use ($config) {
            return Factory::load($config->database);
        }
    );
    Pour information, j'utilise le framework Phalcon (doc du Factory -> doc
    Ca ne parle pas d'encodage, donc je ne sais pas ou je peux modifier quelque chose.

    Le problème vient peut être d'ailleur mais le code est identique entre les 2 versions de PHP.

    Si vous avez de plus de code, n'hésitez pas.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par Math71 Voir le message
    Sur un VM j'ai PHP 5.6 avec mysql 14.14, sur l'autre PHP7 avec mysql 15.1.
    Tu roules en Delorean ? Parce que aux dernières nouvelles, la version la plus récente de MySQL était la 8.0

    Bon, sinon, vu la doc que tu as lié, tu pourrais essayer d'y ajouter une option charset à ta config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $config= [
        "host"     => "localhost",
        "dbname"   => "blog",
        "port"     => 3306,
        "username" => "sigma",
        "password" => "secret",
        "adapter"  => "mysql",
        'charset'   =>'utf8'
    ];
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    Quand je fais "mysql --version" j'ai ça ->
    VM PHP7
    mysql Ver 15.1 Distrib 10.1.38-MariaDB, ....
    VM PHP5.6
    mysql Ver 14.14 Distrib 5.5.62, ...
    Donc je sais pas quelle version est installé, vous m'avez mis le doute... (après ça vient peut être de MariaDB, je sais que c'est sensé être la même chose, mais ya peut ètre une différence)

    Le charset est bien accepté, par contre ça ne résoud pas le problème. Le décodage du mot de passe ne fonctionne pas.

    Il y a toujours une différence entre les données.

    Décidement je ne comprends pas.

    EDIT : j'avais fait le test en encodant le mot de passe chiffré en Base64, malheureusement avec les 0 dans le mot de passe, le décryptage n'était pas complet (ex : MdpI100! devenait après décryptage MdpI1)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    Citation Envoyé par Math71 Voir le message
    ...un mot de passe chiffré que je déchiffre plus tard...
    C'est à nous de DEVINER comment ?? (avec quelles fonctions ?...)


    2-
    ...Je stocke dans ma BDD un mot de passe...
    Quelle est la structure de la colonne (dans laquelle est enregistré le mdp) de la table ??
    • VARCHAR(...?)


    3-
    EDIT : ...en encodant le mot de passe chiffré en Base64, malheureusement avec les 0 dans le mot de passe, le décryptage n'était pas complet (ex : MdpI100! devenait après décryptage MdpI1)
    Ah Bon ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $pwd = 'MdpI100!';
    echo '$pwd : '.$pwd.'<br />';
    $pwd_base64 = base64_encode($pwd);
    echo '$pwd_base64 : '.$pwd_base64.'<br />';
    $pwd_recup = base64_decode($pwd_base64);
    echo '$pwd_recup : '.$pwd_recup.'<br />';
    ?>
    Donne bien :
    $pwd : MdpI100!
    $pwd_base64 : TWRwSTEwMCE=
    $pwd_recup : MdpI100!
    Dernière modification par Invité ; 12/08/2019 à 15h32.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    J'utilise les fonctions de Phalcon, c'est pour ça que je n'ai pas mis de bout de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $crypt=new \phalcon\Crypt();
    $this->signup->identMdp = $crypt->encrypt($motDePasse ,$this->config->encryption->key);
     
    $crypt->decrypt($this->signup->identMdp ,$this->config->encryption->key)
    Pour être sur que la taille de la colonne était bonne, j'ai l'ai passé en VARCHAR(100)

    Pour l'encodage en base64, j'ai aussi utilisé les fonctions proposées par Phalcon... (je confirme que ça ne devrait poser aucun problème...)

    Je me demande si en PHP7.0 Phalcon ne ferait pas de la merde, je voudrais essayé en PHP7.2 mais je n'arrive pas a trouver le dbg 7.2.... (fin je continue a chercher)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Surtout, ne mets pas le lien vers la page de la doc : Encryption/Decryption...


    ...j'ai l'ai passé en VARCHAR(100)...
    Au lieu de "pifométrer", as-tu vérifié la longueur réelle du mdp crypté ? (AVANT de l'enregistrer en BDD !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strlen ( $this->signup->identMdp );
    Dernière modification par Invité ; 12/08/2019 à 16h49.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    Désolé pour la doc, je pensais l'avoir mise dans le premier post.

    Le mot de passe crypté fait 24 caractères, je l'avais mis en varchar(100) pour la base64.

    Le champ n'est pas le problème, ni la version de PHP7 (je viens d'essayer avec PHP7.2).

    Le problème vient bien du lien avec la BDD (j'utilise le même système pour stocker des données en session, et le décryptage fonctionne correctement).

    Qu'est ce qui pourrait poser problème ? Tout semble indiqué l'encodage, mais en PHP5 il y a aucun problème.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    Je pense a un problème d'encodage entre l'application web et la BDD, je viens de faire l'essai en transmettant le mdp en base64, il y a aucun problème.

    Pour chiffré, Phalcon utilise la méthode "openssl_encrypt" avec l'option "OPENSSL_RAW_DATA", est ce que ça ne viendrait pas de la ? Il y a surement des caractères non reconnu.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    Problème résolu, j'ai encodé le mot de passe chiffré en base64 et ça passe correctement.

    Même si je ne comprends toujours pas pourquoi en PHP5.6 ça passait correctement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Encodage] Problème d'encodage avec une base MySQL en UTF-8
    Par Loup solitaire dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/08/2014, 11h16
  2. Encodage UTF-8 avec mysql, apache..
    Par Invité dans le forum Administration
    Réponses: 4
    Dernier message: 12/12/2012, 09h12
  3. problème encodage UTF8 avec mysql
    Par herykid83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/07/2011, 16h49
  4. [MySQL] Encodage avec MySQL (accents, etc.)
    Par supertino7 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/06/2009, 18h28
  5. [MySQL] Encodage avec MySQL
    Par firasfeu dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/02/2008, 21h23

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