Accueil > Forum > > > > Base64
Base64
lundi 25 juin 2007 à 12:08:37 |
Base64

jean84
|
Hello Je cherche a implémenter ma propre fonction de codage/décodage en base64. J'ai trouvé pas mal de codes ainsi que des articles traitant du sujet mais j'ai du mal a comprendre le principe. Je sais qu'il faut réunir 3 octets en 4 groupes de 6 bits, qu'on applique un masque binaire 0x3f afin de ne garder que 6 bits. Ce qui me parait bizarre, c'est que dans quasi tous les codes que j'ai pu voir, ils effectuaient des décalages de bits (<< >>) de 2 ou 4 rangs. Si quelqu'un pouvait me filer un coup de paluche, sa serait top. PS : je tiens à ne pas utiliser de libs mais bel et bien a développer ma fonction. Merci
|
|
lundi 25 juin 2007 à 13:27:16 |
Re : Base64

acx01b
|
salut
qu'est-ce que tu veux faire exactement ?
donne nous le prototype de ta fonction (ce qu'elle est censée faire, tu veux juste les afficher ?) car les nombres en bases 64 c'est codé pareil que les nombres en base 2 dans l'ordinateur, donc je vois pas trop l'histoire d'encodage décodage !
|
|
lundi 25 juin 2007 à 15:08:41 |
Re : Base64

BruNews
|
acx01b > c'est l'encodage MIME de la RFC1113.
ciao... BruNews, MVP VC++
|
|
mardi 26 juin 2007 à 05:44:10 |
Re : Base64

aardman
|
Réponse acceptée !
Salut, jean84> comme tu l'a dis, chaque paquet de 3 octets de données et découpé en 4 paquets de 6 bits, et chaque petit paquet de 6 bits represente un index dans un tableau de 64 chars (voir la rfc pour savoir lesquels). Concretement au niveau des shifts et des masques, tu va tomber sur 4 cas pour extraire tes index de 6 bits: - recuperer les 6 bits haut d'un octet, - recuperer les 2 bits bas d'un octet, et les 4 bits haut d'un autre octet, et les assembler, - recuperer les 4 bits bas d'un octet, et les 2 bits haut d'un autre octet, et les assembler, - recuperer les 6 bits bas d'un octet. il faut donc reflechir a chaque cas avant de te lancer dans la fonction d'encodage.
|
|
mercredi 27 juin 2007 à 07:42:47 |
Re : Base64

jean84
|
acx01b > comme te l'as montré BruNews, c'est effectivement un encodage MIME Aardman > effectivement je comprend mieux l'intérêt des masques ainsi que celui des décalages. A tout hasard, aurais-tu un exemple en langage fonctionnel ? Un grand merci !!
|
|
mercredi 27 juin 2007 à 12:55:20 |
Re : Base64

jean84
|
Ah dernière question : "Concretement au niveau des shifts et des masques, tu va tomber sur 4 cas pour extraire tes index de 6 bits: - recuperer les 6 bits haut d'un octet, - [...]"
Une fois que j'ai récupéré mes 6 bits, je dois les décaler pour en faire des bits de poids faible ? D'après ce que j'ai pu lire, s'en m'a a tout l'air.... Tu peut confirmer ?
Merci
|
|
mercredi 27 juin 2007 à 13:16:21 |
Re : Base64

jean84
|
Bon je sais je fait un peu le boulay mais j'aurais une dernière question (désolé :'( ). Voila mon code (pas grand chose de différent au final avec les autres codes que j'ai pu voir):
unsigned char cIn[3]; unsigned char cOut[4];
char cArray[] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'}; /* Copie 3 octets */ memcpy(cIn, pcBuff, 3);
/* On recupere les 6 premiers bits et on les place en bits de poids faible */ cOut[0] = ((cIn[0] & 0xfc) >> 2);
/* On recupere ensuite les 2 bits restans + les 4 premiers bits de la case suivante */ cOut[1] = ((cIn[0] & 0x03) << 4) | ((cIn[1] & 0xf0) >> 4);
/* On recupere les 4 bits restant de l'octet en cours plus les 2 premiers bits de l'octet suivant */ cOut[2] = ((cIn[1] & 0x0F) << 2) | ((cIn[2] & 0xf0) >> 6);
/* On recupere les 6 derniers bits du dernier octet */ cOut[3] = (cIn[2] & 0x3f);
Ma question est en fait liée au cas où il n'y ai pas un multiple de 24 bits. Je sais qu'il faut rajouter des '=' mais wikipedia n'est pas super explicite à ce sujet ou plutôt je ne comprend pas trop...
|
|
mercredi 27 juin 2007 à 17:36:18 |
Re : Base64

aardman
|
Salut, Dans mon post d'avant j'ai noté que chaque paquet de 6 bits etait un index dans ton tableau cArray, et donc, pour cOut[0] ca donnerait: cOut[0] = cArray[cIn[0] >> 2]; j'ai enlevé le masque aussi, il ne sert pas a grand chose dans ce cas la. Reste a faire pareil pour les autres cas, et a tester.
Pour les '=': Si tes données ne sont pas un multiple de 3 octets, tu peux te retrouver avec un dernier paquet qui fait 2 ou 4 bits. Dans ce cas la, il faut l'encoder en completant les bits manquant par des bits a zéro, et rajouter un ou deux '=', suivant le nombre de bits a 0 que tu as rajouté.
|
|
mercredi 27 juin 2007 à 19:49:05 |
Re : Base64
|
Cette discussion est classée dans : fonction, codes, base64, bits, mal
Répondre à ce message
Sujets en rapport avec ce message
Conception d'un logiciel [ par jpnlpr ]
Bonjour,Je veux realiser un logiciel qui integre differents codes sources realises pour la plupart en C++ (ces codes sources representent des fonction
utiliser les pipe [ par miki42 ]
Bonjour a tous je souhaite utiliser les pipe car il s'avèrent qu'ils me seront tres utile pour mon programme hors meme en consultant les man page j'ai
DLL et GDI [ par Tuizi ]
Bonjour,J'aurais voulus savoir s'il y avait des chose particulière à faire pour utiliser MFC & les fonctions du GDI dans une DLL?En effet, ma fonction
Taille du programme en fonction des variable ? [ par Mamelook ]
Bonjours, en envoyant mon programme a un de mes amis, j'ai remarqué que ce dernier (le programme) faisait 23,8 Mo, lorsque je le place dans une archiv
Tracer le graphique d' une fonction [ par remilecool ]
Bonjour,je suis débutant en C, et je crée une question car mon problème est tellement spécifique et basique que les solutions générales proposés dans
eviter les debordement memoire en c [ par flofloo ]
bonjour tout le monde j'ai un probleme avec la gestion des pointeurs voila je m'explique de suite...j'ai une fonction "ExtractString" dont voici l'ent
recursivité dans TreeView [ par abdenour123 ]
Message : je doit construire une phrase à partir de TTreeView telque les noeud sont les opérateurs logique et les dernière feuilles sont les phrase
aide [ par abdenour123 ]
je doit construire une phrase à partir de TTreeView telque les noeud sont les opérateurs logique et les derniére feuilles sont les phrases.cela dit qu
probléme de treeview et la recursivité [ par abdenour123 ]
je doit construire une phrase à partir de TTreeView telque les noeud sont les opérateurs logique et les derniére feuilles sont les phrases.cela dit qu
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice CRéATION D'UNE BASE DE DONNéE SOUS SQL AZURECRéATION D'UNE BASE DE DONNéE SOUS SQL AZURE par junarnoalg
Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.
SQL Azure est avant tout un service d'hébergement de base de données relationnelles construit sur SQL Server. Il permet aux entreprises d...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|