Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - szyfrowanie stringa do base64

dc07 14 Lip 2014 13:13 1347 12
  • #1 14 Lip 2014 13:13
    dc07
    Poziom 11  

    obecnie uczę się grzebiąc w Borland Builderze 6 (klasyk)

    zmieniam zawartość Memo1 stosując szyfr char + 13 ;)

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    jak mogę zmienić AnsiString text do postaci base64?

    0 12
  • #4 14 Lip 2014 16:06
    witoldwitoldowicz
    Poziom 28  

    Niepamietam skad to wzialem ale faktysznie na koncu powinno byc
    #endif

    0
  • #5 15 Lip 2014 07:45
    dc07
    Poziom 11  

    użyłem https://github.com/superwills/NibbleAndAHalf/blob/master/NibbleAndAHalf/base64.h

    dodałem

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    ale nie bardzo chce mi to działać ;(

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    błędy:

    Cytat:
    [C++ Error] Unit1.cpp(25): E2034 Cannot convert 'AnsiString' to 'const void *'
    [C++ Error] Unit1.cpp(25): E2342 Type mismatch in parameter 'binaryData' (wanted 'const void *', got 'AnsiString')
    [C++ Error] Unit1.cpp(25): E2034 Cannot convert 'int' to 'int *'
    [C++ Error] Unit1.cpp(25): E2342 Type mismatch in parameter 'flen' (wanted 'int *', got 'int')

    0
  • #6 15 Lip 2014 14:46
    witoldwitoldowicz
    Poziom 28  

    Ansistríng txt="ala";
    Ansistring b64=base64_encode(txt.c_str(),txt.Length());

    0
  • #7 15 Lip 2014 15:17
    dc07
    Poziom 11  

    już prawie dobrze ;)

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    kompiluje bez błędu ale...

    przy wywołaniu Zakoduj1Click pojawia się

    C++ - szyfrowanie stringa do base64

    0
  • #8 15 Lip 2014 15:50
    witoldwitoldowicz
    Poziom 28  

    Wrzuc tutaj caly projekt bo niewiadomo skad wziales ta funkcje i jakie maja byc parametry. Czemu nie korzystasz z tego co wyslalem?

    0
  • Pomocny post
    #10 15 Lip 2014 16:20
    witoldwitoldowicz
    Poziom 28  

    void __fastcall TForm1::Zakoduj1Click(TObject *Sender) {
    AnsiString text = Memo1->Lines->Text;
    // zakoduj do base64
    //AnsiString b64enc = base64(text.c_str(), text.Length(), 0);
    int flen;//dlugosc zwruconego textu
    char *b64enc=base64(text.c_str(), text.Length(), &flen);

    // koniec kodowania
    Memo1->Text = b64enc;
    free(b64enc); // zaalokowane przez malloc
    Form1->Zakoduj1->Enabled = False;
    Form1->Odkoduj1->Enabled = True;
    }

    0
  • #11 15 Lip 2014 16:26
    dc07
    Poziom 11  

    rewelacja!!!! dużo nauki przede mną ;(

    teraz sekcja dekodowania, ale to odwrócenie tego co podałeś ;)

    zrobiłem

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    i poprawnie zwraca odkodowany ciąg znaków, ale dodaje mi na końcu jakieś 3 znaki :)

    0
  • #12 15 Lip 2014 20:09
    witoldwitoldowicz
    Poziom 28  

    Ta funkcja nie zwraca zera na koncu.
    za char *b64dec = unbase...
    dodaj
    AnsiString b64;
    b64.SetLength(flen);
    memcpy(b64.c_str(),b64dec,flen);
    w b64 masz poprawne.

    0