-
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
-
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
-
Merci beaucoup, réponse d'une qualité très remarquable et appréciable ! :ccool: