base64 -- verständnisproblem



  • Hallo Leute,

    ich wollte gerne Benutzernamen und Kennwort direkt hintereinanderschreiben und dann mit base64 Kodieren. Jetzt stellt sich eine Frage. Ich habe in der MSDN folgendes gefunden:
    Decodieren:

    inline BOOL Base64Decode(
       LPCSTR szSrc,
       int nSrcLen,
       BYTE* pbDest,
       int* pnDestLen 
    ) throw( );
    

    Encodieren:

    inline BOOL Base64Encode(
       const BYTE* pbSrcData,
       int nSrcLen,
       LPSTR szDest,
       int* pnDestLen,
       DWORD dwFlags = ATL_BASE64_FLAG_NONE 
    ) throw( );
    

    Eigentlich müsste es doch bei der Parameterübergabe vom Prinzip her genau anderherum sein, oder nicht? Also, dass beim Encodiern als Source ein String und als Destination ein BYTE* angegeben werden muss. Und beim Decodieren ein BYTE* Also Src und ein String als Dest angegeben werden muss.
    Darum versteh ich das irgendwie nicht.
    Kann mir jemand vielleicht ein kleines Beispiel für die Anwendung geben?

    danke



  • Theoderich schrieb:

    Eigentlich müsste es doch bei der Parameterübergabe vom Prinzip her genau anderherum sein, oder nicht? Also, dass beim Encodiern als Source ein String und als Destination ein BYTE* angegeben werden muss. Und beim Decodieren ein BYTE* Also Src und ein String als Dest angegeben werden muss.

    Nö, das passt schon. Mit base64 werden beliebige Binärdaten in ein 6bit-Format umgewandelt und als Text codiert. Sinn der Sache ist ursprünglich, dass damit Binärdaten per Mail verschickt werden können, auch wenn irgendwo ein Mailserver aus der Steinzeit sitzt, der Probleme mit Zeichen über 127 oder mit Steuerzeichen < 32 hat.



  • Und wie kriege ich jetzt einen String in das BYTE* Format?

    Kannst du mir nicht ein kurzes Beispiel für die Benutzung von Base64Encode geben?
    Einfach nur die Variablendeklaration und den Aufruf?



  • Vorweg: Ich kenn die Funktionen nicht, ich versuche nur dir dein Verständnisproblem zu lösen.

    char * text = "Text";
    char * target = new char[strlen(text) * 4/3 + 1];
    int target_len;
    Base64Encode(reinterpret_cast<BYTE*>(text), strlen(text), target, &target_len);
    

Anmelden zum Antworten