Base64-Kodierung
-
Hi,
ich muss meine Zugangsdaten (Login und Passwort zu E-Mail-Server) base64 kodieren. In Wikipedia gibt es genug Information, um die Kodierung kennenzulernen.
Weiß vielleicht jemand, ob der Algorithmus zur base64-Kodierung in C++ schon implementiert ist, damit man ihn benutzen kann? Wäre sehr nett.
Ich glaub, dass es so ein Algotihmus schon gibt, weil er sehr oft verwendet wird.
-
Sicher gibt es schon genug Leute, die so einen Algorithmus umgesetzt haben - du mußt sie nur finden (Google ist dein Freund)
PS: Und auf der Wikipedia-Seite gibt es ganz unten den Abschnitt "Weblinks" - und dort sind neben einigen Online-Umwandlern auch Quelltexte in C und Java verlinkt.
-
Wenn jemand braucht, eine Base64-Kodierung:
void CMeineKlasseDlg::Base64Code(const CHAR *strIn, CString &strOut) { const static CHAR base64ABC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; strOut.Empty(); const size_t len = strlen(strIn); for(int i=0; i<len; i+=3) { LONG l = ( ((LONG)strIn[i ])<<16 ) | (((i+1) < len) ? (((LONG)strIn[i+1])<<8 ) : 0 ) | (((i+2) < len) ? ( (LONG)strIn[i+2] ) : 0 ); strOut += base64ABC[(l>>18) & 0x3F]; strOut += base64ABC[(l>>12) & 0x3F]; if (i+1 < len) strOut += base64ABC[(l>> 6) & 0x3F]; if (i+2 < len) strOut += base64ABC[(l ) & 0x3F]; } switch (len%3) { case 1: strOut += '='; case 2: strOut += '='; } }
Cstring strUserName; // Das soll kodiert werden CString strEncode; // Hier liegt der Ergebnis der Kodierung Base64Code(strUserName, strEncode); // Kodierung TRACE("StrUserName nach der Kodierung: %s\n", strEncode); // Im Debugfenster ansehen
Die Kodierung funktioniert ganz OK, habe getestet.
Und eine Dekodierung:void CMeineKlasseDlg::Base64Decode(IN const CHAR* strIn, OUT CString& strOut) { const static CHAR base64ABC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; strOut.Empty(); const size_t len = strlen(strIn); for (int i=0; i<len; i+=4) { LONG l = (( (strIn[i ] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i ]) - base64ABC)) << 18) : 0) | ((((i+1) < len) && (strIn[i+1] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i+1]) - base64ABC)) << 12) : 0) | ((((i+2) < len) && (strIn[i+2] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i+2]) - base64ABC)) << 6 ) : 0) | ((((i+3) < len) && (strIn[i+3] != '=')) ? ((LONG)(strchr(base64ABC, strIn[i+3]) - base64ABC)) : 0); BYTE ch1 = ((l>>16) & 0xFF); if (ch1) strOut += ch1; BYTE ch2 = ((l>>8 ) & 0xFF); if (ch2) strOut += ch2; BYTE ch3 = ( l & 0xFF); if (ch3) strOut += ch3; } }
Diese habe ich nicht getestet, aber muss auch gut sein.