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 :

base64_encode et decode [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par défaut base64_encode et decode
    Bonjour,

    Lorsque j'encode 1 avec base64_encode j'obtiens MQ==.
    Lorsque je décode MQ== avec base64_decode j'obtiens 1.

    Logique...

    Mais lorsque je décode MQ= ou bien encore MQ avec base64_decode j'obtiens 1 aussi.

    Est-ce logique ? Si oui pourquoi ?

    Je me sers de base64_encode() et base64_decode() pour traiter le résultat d'une donnée cryptée avec mcrypt.
    Je crains que le fait de pouvoir décoder 2 valeurs différentes pour un même résultat me crée des failles de sécurité.

    Merci

  2. #2
    Membre confirmé Avatar de alejandro
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2004
    Messages : 167
    Par défaut
    Bonsoir,

    La base 64 est une base numérique, elle ne sert pas à crypter quoi que ce soit, c'est juste une manière de représenter des données numériques.

    Tu sais surement déjà que tes données sont représentées dans ton ordinateur sous forme de nombres écrits en binaire (c'est ce que l'on appelle la base 2, car elle utilise un jeu de 2 symboles pour représenter les nombres).

    Lorsque tu tapes un caractère, l'ordinateur va rechercher dans une table quelle valeur il doit utiliser (quel nombre il doit prendre) pour représenter ton caractère. Il existe plein de tables différentes mais pour l'exemple, et parceque tu vas voir que je ne la prends pas au hasard, nous allons utiliser la table ISO-8859-1.

    Dans cette table, ton caractère 1 se représente par le numéro 49. Hors le numéro 49 s'écrit MQ en base 64. Les règles de représentation des nombres au niveau informatique font qu'un encodage base 64 se représente par groupe de 4 symboles (tout comme un encodage base 2 - binaire, se représente par groupe de 8 symboles - des bits).

    En binaire, 49 s'écrit 110001 mais comme on doit écrire les nombres binaires par groupes de 8 symboles, la règle veut que l'on complète avec des 0 avant la chaine, on écrit donc 49 comme suit 00110001. En base 64, 49 s'écrit MQ, mais comme on doit écrire les nombres de la base 64 par groupes de 4 symboles, la règle veut que l'on complète avec des = après la chaine, on écrit donc 49 comme suit MQ==.

    Pourtant, en binaire si on enlève les 0 situés avant ton nombre, cela ne changes pas sa valeur. He bien en base 64 c'est pareil, mais avec les = situés après ton nombre.

    Pour répondre à ta question concernant le décodage, les valeurs MQ, MQ= et MQ== signifient tout simplement la même chose en base 64, tout comme les valeurs 00110001, 0110001 et 110001 signifient la même chose en base 2 (en binaire).

    Je te conseille de jeter un oeil à cet article si tu souhaites en savoir plus :

    http://fr.wikipedia.org/wiki/Base64


    Voilà, j'espère avoir répondu à ta question, bonne continuation

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par défaut
    Merci beaucoup, réponse d'une qualité très remarquable et appréciable !

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

Discussions similaires

  1. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50
  2. DECODE
    Par nine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 08/07/2004, 17h24
  3. [DB2] IF ou DECODE
    Par chrisdvp dans le forum DB2
    Réponses: 2
    Dernier message: 27/06/2004, 14h44
  4. l'équivalent de DECODE de Oracle ?
    Par MokhTelnet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/06/2004, 11h19

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