Probleme bei Deklaration



  • Hallo,

    in einem Projekt benutze ich zur Verschlüsselung das dcpcrypt-Package von David Barton.

    Obwohl die Anweisung

    unsigned char *ucDigest[20];
    

    nur lokale Bedeutung zu haben scheint, funktioniert der Code nur, wenn er im Header als privat deklariert wird.

    // xyz.h
    private:
    unsigned char *ucDigest[20];
    
    // xyz.cpp
    String KeyStr = "123";
    String str = "Mein Geheimnis";
    String str_crypt;
    
    TDCP_sha1 *hash = new TDCP_sha1(this);
    hash->Init();
    hash->UpdateStr(KeyStr);    // generate a hash 
    //unsigned char *ucDigest[20];
    // Sonderbar: funktioniert nicht wenn lokal deklariert, sondern nur, wenn im Header als
    //            privat deklariert 
    hash->Final(ucDigest);            // save the hash in Digest
    hash->Free();
    
    Cipher = new TDCP_rc4(this);
    Cipher->Init(ucDigest, sizeof(ucDigest)*8, NULL);  // remember size is in BITS (hence sizeof*8)
    str_crypt = Cipher->EncryptString(str);
    Cipher->Burn();
    Cipher->Free();
    

    Kann mir das jemand erklären?

    Gruß
    Leo



  • Du hast bei dem Rest auch nicht Explizit
    public:
    stehen.

    schreib mal anstatt
    private:
    public:



  • Also so wie ich das nun verstehe soll er in der .cpp alles private bzw. public definieren???????????????

    😕



  • Hallo,

    danke für die Antworten, aber mir scheint, ich habe meine Frage noch nicht ganz auf den Punkt gebracht. Daher hier noch einmal.

    Mich wundert, warum es nicht ausreicht, besagte Deklaration ... lokal vorzunehmen, anstatt im public oder private-Bereich des Headers. Denn augenscheinlich wird ucDigest ein Wert zugewiesen, der wenige Zeilen später wieder abgerufen wird. Anschließend wird ucDigest nicht mehr benötigt.

    hash->Final(ucDigest);            // save the hash in Digest
    hash->Free();
    
    Cipher = new TDCP_rc4(this);
    Cipher->Init(ucDigest, sizeof(ucDigest)*8, NULL);  // remember size is in BITS (hence sizeof*8)
    

    Hoffe, das war verständlicher!

    Gruß
    Leo



  • Leo Freitag schrieb:

    //unsigned char *ucDigest[20];
    // Sonderbar: funktioniert nicht wenn lokal deklariert, sondern nur, wenn im

    Was bedeutet funktioniert nicht? genau?
    Was sagt der Debugger?



  • Erwartet die Funktion denn tatsächlich einen char**, oder nur einen char*.



  • Denke dass ucDigest nirgends mit new angelegt worden ist. Wenns im Header steht dann funktionierts zufällig.
    BTW. der kommentar

    Cipher->Init(ucDigest, sizeof(ucDigest)*8, NULL);  // remember size is in BITS (hence sizeof*8)
    

    kann irgendwie nicht stimmen. sizeof(ucDigest) gibt dir die grösse eines pointers in bytes zurück ( höchstwahrscheinlich 4 ), Der Wert den du übergibst ist also 32. Die funktion Cipher->Init() erwartet höchstwahrscheinlich die grösse des buffers und der ist nur 20 bytes gross. Ohne das decrypt-package zu kennen würde ich sagen "da stimmt was nicht".
    Kurt



  • DerAltenburger schrieb:

    Leo Freitag schrieb:

    //unsigned char *ucDigest[20];
    // Sonderbar: funktioniert nicht wenn lokal deklariert, sondern nur, wenn im

    Was bedeutet funktioniert nicht? genau?
    Was sagt der Debugger?

    Hallo,

    in Variante A (Deklaration im Header) sagt der Debugger bei Breakpunkt in Zeile

    hash->Final(ucDigest);            // save the hash in Digest
    

    bei Maus auf 'ucDigest' = 01533514

    in Variante B (Deklaration lokal) zeigt der Debugger bei Maus auf 'ucDigest' 20 Werte wie folgt: 004B4299, 004B42A1, etc

    Gibt's dafür ne Erklärung?!

    Gruß
    Leo


Anmelden zum Antworten