backslash problem



  • Und außerdem heißt das bei C++ std::string und operator += ...



  • ich habe einen string der alles beinhaltet

    string chipher;

    wie kann ich diesen in char bla[1024] umwandeln oder .c_str() benutzen ohne auf das backslash-problem zu stossen?



  • Kannst du denn erklären, was du mit "Bakslash-Problem" überhaupt meinst? Der Backslash hat in Quelltexten eine besondere Bedeutung als Escape-Zeichen - in den Strings, die vom Programm gelesen werden, ist er ein ganz normales Zeichen.



  • 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.


Anmelden zum Antworten