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 imWas 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 kommentarCipher->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 imWas 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 Digestbei 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