2009-09-12 15 views
-5

J'essaie de décoder la chaîne encodée en base64 avec openssl. Cependant, cela ne fonctionne que 4 fois sur 5.Décodage Base64 - longueur de chaîne incorrecte

La chaîne décodée doit toujours avoir une longueur de 64 caractères. BIO_read() renvoie toujours 64. Cependant, le tampon retourné est parfois plus court que 64!

Des idées quel est le problème? Comment puis-je toujours obtenir la bonne chaîne?

+0

Que voulez-vous dire par "tampon retourné"? Vous passez le tampon * dans * BIO_read. Exemple de code aiderait. –

+0

Je veux dire ce que BIO_read met en destination. Quoi qu'il en soit, j'ai repéré mon problème à caractère unique. Il semble que parfois BIO_read renvoie le même caractère que la fin. et ça tue la corde ... – Mantas

Répondre

4

Utilisez-vous str [n] cpy? Tu ne peux pas! Les données codées en Base64 peuvent contenir des caractères nuls, que les fonctions de traitement de chaîne C interprètent comme des fins de chaîne. Utilisez memcpy à la place de str [n] cpy, memcmp au lieu de strcmp, etc. Ces fonctions requièrent que vous connaissiez la taille de vos données, mais je crois que vous le connaissez.

De plus, si vous n'êtes pas très confiant sur les chaînes de style C et autres, il y a beaucoup d'informations sur le sujet ici.

+0

Merci !!! C'était la partie manquante du puzzle. – Mantas

+0

Hmmm, les données codées en base64 ne sont-elles pas entièrement composées de caractères imprimables (a-z, A-Z, 0-9, '+' et '/' [et '=' pour le remplissage])? – pmg

+1

Je fais référence aux données qui ont été codées en Base64 (c'est-à-dire ce que vous obtenez lorsque vous décoderez Base64), et non à la forme codée Base64 des données. – Artelius

Questions connexes