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
SMTP Base64 Débutant... [ par bisnn ]
Bonjour a tous, Je cherches un moyen d'envoyer un mail en smtp avec un fichier joint... Après plusieurs recherche je sais maintenant qu'il est nécess
Ressources réseau [ par mohdaef ]
Bonjour J'essaye de coder une application portable (Windows/Unix) Je programme en C++ et je dois réaliser une fonction qui permet de lister toute les
matrice unique [ par Kickri ]
Bonjour à tous, j'aurai une question, si on veut effectuer l'analyse d'une matrice avec une fonction afin qu'elle percoive si la matrice contient les
Fonction decouper une chaine de caractere [ par 2koa ]
Bonjour, je dois ecrire une fonction qui decoupe une chaine de caracteres en mots. La fonction renvoie un tableau, où chaque case contient l'adresse
Algorithme [ par serie1 ]
Bonjour, je débute. Quelqu'un pourrait m'expliquer le déroulement de cet alogo. J'ai bien compris que l'on appelle la fonction que l'on a crée "calcu
fonction FORC() [ par andromida ]
[i]Salut tous; comment peut on utiliser la fonction [b]forc()[/b] sur C sous windows pour creer des processus pères et d'autres fils Par exemple comm
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CXIMAGERE : CXIMAGE par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|