backslash problem
-
wenn ich den mit openssl verschlüsselten encoderbuffer[1024] weiterverarbeite und ihn mittels sockets versende arbeitet er sich nur bis zu backslash vor und nicht weiter!
-
for (int i = 0; i < tmplen; i++) { if(encodebuffer[i] == '\\') { chipher.append("\\"); } else { chipher += encodebuffer[i]; } } cout << "\n---" << chipher.size(); // !!! IST ZB 225 cout << "\n------bla---\n" << encodebuffer << "\n---" << strlen(encodebuffer) << "----\n"; // !!!! IST ZB JEDOCH NUR 97 EVP_CIPHER_CTX_cleanup(&ctx); strcpy (routput, chipher.c_str()); strcat (routput,"\\eos"); return routput;und routput ist auch zb auch nur 97 zeichen lang, obwohl es 225 sein sollten!
-
Und was für einen Wert hat tmplen?
Das einzige Zeichen, das in Strings (in C-Darstellung) eine Sonderstellung einnimmt, ist '\0' - das markiert das Ende des Strings. Wenn du Null-Bytes als normale Zeichen verwenden willst, mußt du sie womöglich gesondert betrachten (oder std::string verwenden - der kann sie auch als normale Zeichen enthalten).
-
tmplen hat 224!!!
aufgrund des zusätzlichen backslashs sind es dann 225!
tmplen steht für die verschlüsselte textlänge
-
Kannst du mal das Zeichen ausgeben lassen (notfalls nach int gecastet), das an der problematischen Stelle steht?
-
ich verstehe nicht wieso chipher alles korrekt enthält jedoch beim umwandeln was verloren geht und encodebuffer von dem aus nach chipher "kopiert" wurde nicht alles korrekt widergibt.
strlen wird wohl die gesamte grösse ausgeben und nicht nur bis zum einzelnen backslash
-
96 +:: 97 :: 98 �:: 99 �::
:: int i <zeichen> ::
bei 97 steht garnichts, wohl aufgrund des einzelnen backslashs!
-
(int) encodebuffer[97] gibt 0 aus
-
Ich würd vermuten, dass beim Verschlüsseln ein char auf \0 abgebildet wird und daher der resultierende String an dieser Stelle als beendet angesehen wird.
Anstatt den Encodebuffer auszugeben, könnte man mit einer for bis 1024 Zeichen für Zeichen des Arrays ausgeben, also
for (int i = 0; i < 1024; i++) cout << encodebuffer[i];
-
Vielleicht ist das beim Blowfish-Verschlüsselungsdings so, dass manche Zeichen zu 0 verschlüsselt werden? Weiß nicht, kenne mich nicht mit aus, aber falls das so sein sollte, solltest du die verschlüsselten Zeichen nicht mehr als string behandeln, sondern binär.
e: Oh, man könnte auch mal den Post vom Vorposter gescheit lesen... kraks...
-
ts0 schrieb:
(int) encodebuffer[97] gibt 0 aus
Und - ist 0 seit neuestem der ASCII-Code für einen Backslash? (das wäre ja ganz was neues)
Wenn du Daten hast, die ASCII 0 als normales Element enthalten können (und bei deinen verschlüsselten Daten scheint das ja der Fall zu sein), kannst du die nicht mehr als C-Strings auffassen (stlen() etc sehen diese Null als Stringendemarke an), sondern mußt dir die Länge der Daten nebenher speichern.
-
danke für die antworten.
werde nun den verschlüsselten text in hex umwandeln um damit weiterarbeiten zu können und umgekehrt auf der client-seite
-
Ich hab irgendwie das Gefühl, du verstehst das nicht ganz
Inwiefern willst du denn die Daten "in Hex umwandeln"?
-
hex mag blödsinn sein.
jedoch würde die umwandlung in binary form oder mit hilfe des huffman algorithmus (?!) sinn ergeben. oder lieg ich da etwa falsch
-
ts0 schrieb:
hex mag blödsinn sein.
Oder auch nicht. Hexadezimal ist eine ganz brauchbare textuelle Darstellung binärer Daten. Vielleicht etwas platzverschwenderisch, dafür kann es jeder E-Techniker lesen

jedoch würde die umwandlung in binary form
Die Daten liegen schon in binärer Form vor, wozu also umwandeln.
oder mit hilfe des huffman algorithmus (?!) sinn ergeben. oder lieg ich da etwa falsch
Falsche Baustelle, Huffman ist ein Kompressionsalgorithmus.