Wie verschlüsselt man einen String



  • Fröhliche Weinachten @ all :xmas1: :xmas2:
    Ich würde gerne einen String - bestehend aus Buchstaben und Leerzeichen - verschlüsseln und dan in eine Datei schreiben um ihn vor fremden Zugriff zu schützen und auch zu Testzwecken.
    Nur sind meine C++ Kentnisse noch nicht soooo... hoch und ich weiß folglich nicht wie man das anstellt.
    Könte mir bitte jemand ein Beispiel schreiben? (aber ohne in Datei schreiben ,das kann Ich schon 😉 )



  • (*******) schrieb:

    Fröhliche Weinachten @ all :xmas1: :xmas2:
    Ich würde gerne einen String - bestehend aus Buchstaben und Leerzeichen - verschlüsseln und dan in eine Datei schreiben um ihn vor fremden Zugriff zu schützen und auch zu Testzwecken.

    Welchen Algorithmus möchtest du denn zum Verschlüsseln verwenden? Wenn du die Daten einfach nur unleserlich in eine Datei schreiben möchtest, kannst du z.B. für jedes Zeichen dessen Zweierkomplement bilden

    Beispiel:

    int main()
    {
        string s("Hallo Welt!");
    
        for(size_t i = 0, end = s.length(); i < end; ++i)
              cout << static_cast<char>(~s[i]);
    
        cout << endl;
    }
    

    Entschlüsseln geht durch erneute Bildung des Zweierkomplements...
    Wenn dir das zu simpel/zu leicht zu knacken/etc. ist, dann rück mal mehr Infos raus, was du dir genau vorstellst 🙂

    Gruß Caipi



  • Erstmal weis ich nicht was ein Zweierkomplement ist , erklär bitte mal.

    Wasfür Algorytmen gibt es ? Ist damit gemeint wiviel bit Verschlüsselung? 🙄
    Erstmal ist mir nur wichtig das der Text von keinem Menschen mehr gelesen werden kan, aber erklär das andere trotzdem mal, vieleicht versteh ichs ja! 😃
    (dein Quell funktionirt nicht 5 unerklärliche Fehler?!?)



  • a) Schreib mal in einem ordentlichen Deutsch. DU erwartest etwas von uns, nicht wir von dir.
    b) Es gibt auch noch Dinge wie www.google.de oder www.wikipedia.de
    c) Man schreibt Algorithmus nicht mit 'y' - Keine Ahnung wie alle auf das 'y' kommen. 😕

    Gruß



  • OK , tut mir leid wen ich mich falsch ausgedrückt habe , war nicht beabsichtigt.
    Kanst du mir vieleicht trotzdem antworten ,is ja Weinachten? :xmas1:



  • (*******) schrieb:

    Erstmal weis ich nicht was ein Zweierkomplement ist , erklär bitte mal.

    Beim Komplement wird jedes Bit eines Zeichens durch sein Gegenteil ausgetauscht (btw, das da oben ist das Einerkomplement). Also wird aus einer 1 eine 0 und umgekehrt (und aus 00110100(b) wird 11001011(b)).

    Wasfür Algorytmen gibt es ? Ist damit gemeint wiviel bit Verschlüsselung? 🙄

    Da gibt es viel mehr als du dir vorstellen kannst, angefangen bei Cäsar-Chiffre (verschiebt jeden Buchstaben um drei Stellen im Alphabet: A wird D, B wird E,...) und Scytale (vertauscht bestimmte Buchstaben des Wortes miteinander) bis hin zu RSA (Modulo-Rechnungen mit riesigen Primzahlen - praktisch kaum zu knacken).

    Erstmal ist mir nur wichtig das der Text von keinem Menschen mehr gelesen werden kan, aber erklär das andere trotzdem mal, vieleicht versteh ichs ja! 😃

    In dem Fall reicht wohl etwas einfacheres, z.B. die obige Komplement-Darstellung.

    (dein Quell funktionirt nicht 5 unerklärliche Fehler?!?)

    Wenn du dazuschreibst, was für Fehler, kann dir auch geholfen werden (könnte aber daran liegen, daß du einige Header vergessen hast).



  • Denke erst mal
    Ich hab alles kapiert bis auf das mit dem Zweierkomplement (ich weiß ich bin dumm) 1 und 0 geht ja noch aber was ist z.B. mit 'G' oder '?' oder auch '5442114' ?
    Köntest du mir bitte bitte mal ein Beispiel schreiben? , wäre echt nett 🙂



  • na bei einem computer ist alles binär aufgebaut!

    Auch ein "G" interpretiert der computer als eine reihe von 0en und 1en, und für das "G" werden dann eben die 0 und 1 getauscht, und somit entsteht ein ganz anderes zeichen!



  • Ganz einfach: Ein Zeichen wie 'G' wird intern auch als Bitfolge dargestellt, also kannst du jedes Bit einzeln umkehren:
    'G' = 71 = 0100 0111(b) => 1011 1000(b) = 184 = '¸' (irgendein Sonderzeichen des erweiterten Zeichensatzes)



  • OK , Danke das hab ich jetzt kapiert aber wie man das macht noch nicht.
    Ne kurze Erklärung währe super! 😃



  • (*******) schrieb:

    OK , Danke das hab ich jetzt kapiert aber wie man das macht noch nicht.

    Was hast du jetzt kapiert und was nicht?

    Wie gesagt: Der ~-Operator bildet für builtins das Zweierkomplement. Wie das vonstatten geht, siehe CStolls Post oder aber auch einfach mal in der wikipdia.

    Dazu mal ein kompilierbares Minimalbeispiel:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string s("Hallo Welt!"); // Original String...
    
        for(size_t i = 0, end = s.length(); i < end; ++i)
            s[i] = ~s[i]; // Das 2-Komplement von s[i] bilden.
    
        cout << "\ns = " << s << endl; // der "verschlüsselte" string...
    
        for(size_t i = 0, end = s.length(); i < end; ++i)
            s[i] = ~s[i]; // Nochmal das 2-Komplement von s[i] bilden. Jetzt enthält  s[i] wieder den Ursprungswert.
    
        cout << "s = " << s << endl; // der ursprungs string...    
    }
    

    Gruß Caipi



  • (*******) schrieb:

    OK , Danke das hab ich jetzt kapiert aber wie man das macht noch nicht.
    Ne kurze Erklärung währe super! 😃

    Schau Dir mal mein Postiung in diesen Thread an. Da ist erklärt wie das geht, was Du vorhast.

    :xmas2: Werner



  • Hallo,
    das sind aber alles unsichere Verfahren.

    Ein sicheres Verfahren wäre z.B. xTEA:

    http://en.wikipedia.org/wiki/XTEA

    Dabei wandelt man einen 8-Zeichen langen Text so in 2 Integer/Long-Variablen um:
    v[0] = ch[0]+(ch[1]<<8)+(ch[2]<<16)+(ch[3]<<24);
    v[1] = ch[4]+(ch[5]<<8)+(ch[6]<<16)+(ch[7]<<24);

    Der Key (k) ist ein Long-Array, mit 4 Long-Zahlen, kann ebenfalls wie oben aus einem String berechnet werden.



  • Caipi schrieb:

    Wie gesagt: Der ~-Operator bildet für builtins das Zweierkomplement.

    Einerkomplement - mach dir mal den Unterschied klar 😉 (z.B. unter Wikipedia



  • CStoll schrieb:

    Caipi schrieb:

    Wie gesagt: Der ~-Operator bildet für builtins das Zweierkomplement.

    Einerkomplement - mach dir mal den Unterschied klar 😉 (z.B. unter Wikipedia

    Der Unterschied ist mir klar. Keine Ahnung, wieso ich desshalb (bisher) angenommen habe, dass der NOT-Operator (Der Name sagt ja eigentlich schon alles...) das Zweierkomplement bildet. 😮.

    Danke für die Berichtigung!

    Gruß Caipi



  • warum den nicht einfach mit XOR?

    sicherer als das zweierkomp. und doch ganz leicht


Anmelden zum Antworten