String einfach verschlüsseln



  • otze schrieb:

    //edit eigentlich gehörts ja ins c++ 🙄

    nein, es geht ja um den Algorithmus und nicht darum, wie man C++ anwendet. C++ ist ja mittel zum Zweck



  • Wenn du ihn nicht entschlüsseln musst dann nimm MD5.



  • Unix-Tom schrieb:

    Wenn du ihn nicht entschlüsseln musst dann nimm MD5.

    MD5 verschlüsselt die daten nicht, sondern liefert nur einen Wert der (fast) eindeutig den Daten zuzuordnen ist.



  • Benutz doch einfach Bit-Rotation. Damit ändert sich die Anzahld er Bytes nicht und es ist sehr sicher, wenn man es klug umsetzt.



  • Unix-Tom schrieb:

    Wenn du ihn nicht entschlüsseln musst dann nimm MD5.

    ich will ja keinen HASH haben, sondern Informationen verschlüsseln.

    INTEGER schrieb:

    wenn das verschlüsselte genauso lang sein muss kannst du nur char+1 und char-1
    bzw. ähnlich simple codierung nehmen.

    ja, das habe ich ja bereits eingeräumt.

    Ich habe es jetzt erstmal so gelöst, in dem ich den EXOR-verschlüsselten String in einen Hex-String umgewandelt habe. Das is erstmal, trotz Redundanz, eine annehmbare Lösung ohne viel unnötigen Aufwand und zudem noch Copy&Paste-fähig



  • Eine simple Verschlüsslung die im Alphabet bleibt und die man nicht anhand der Anzahl der Buchstaben entschlüsseln kann ist folgende:

    Verschlüsslung:
    1.Der Text wird in Asciiwerte umgewandelt(Hier die Position im Alphabet,ich habe die Asciitabelle nicht im Kopf)
    2.Dann wird für jeden Buchstaben im Wort,der Wert des ersten Buchstaben + (die Position des Buchstabens -1) addiert.Das Leerzeichen hinter dem Wort zählt zum Wort.
    3.Dann wird der Schlüssel wortweise addiert(hier die Zahlenreihe 1,2,3,4...),die erste Position des Schlüssel mit dem ersten Buchstaben u.s.w
    4.Wenn ein Wert >=27 ist werden 27 abgezogen.
    5.Die Asciiwerte werden in Text umgewandelt.

    E |I |N |_ |E |S |E |L |_ |S |T |E |H |T |_ |I |M |_ |R |E |G |E |N |
     5| 9|14| 0| 5|19| 5|12| 0|19|20| 5| 8|20| 0| 9|13| 0|19| 5| 7| 5|14|
     5| 6| 7| 8| 5| 6| 7| 8| 9|19|20|21|22|23|24| 9|10|11|19|20|21|22|23|
     1| 2| 3| 4| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11| 1| 2| 3| 4| 5| 6| 7| 8|
    11|17|24|12|11|27|15|24|14|44|47|34|39|53|35|19|25|14|42|30|34|34|45|
      |  |  |  |  | 0|  |  |  |17|20| 7|12|26| 8|19|25|14|15| 3| 7| 7|18|
    K |Q |X |L |K |_ |O |X |N |Q |T |G |L |Z |H |S |Y |N |O |C |G |G |R |
    

    Entschlüsslung:
    1.Die erste Position des Schlüssel wird vom ersten Buchstaben des Codierten Textes abgezogen.
    2.Dann wird der Wert durch 2 geteilt (der erste Buchstabe ist entschlüsselt)
    3.Dann werden solange der Wert des ersten Buchstabens des Wortes +(Position des Buchstabens-1) und der Wert des Schlüssels an dieser Position abgezogen,bis man zu einen Leerzeichen kommt,dann beginnt man wieder bei 1.
    4.Wenn ein Wert < 0 ist wird 27 hinzu addiert



  • kingruedi schrieb:

    nimm einfach std::strings, die achten ja nicht auf 0-Terminierung. Außerdem gehst du dann bei der Funktion nicht die Gefahr ein, dass du das delet vergisst 🙄

    Vorsicht! strings achten zwar nicht auf die 0-Terminierung, Windows aber schon!

    #include <iostream>
    #include <stdlib.h>
    #include <windows.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string str;
    
        str += "Hallo";
        str += '\0';
        str += "Welt!";
    
        cout << str << endl;
    
        MessageBox (0, str.c_str (), "", MB_OK); // Boing !
    
        system("PAUSE");	
        return 0;
    }
    


  • @N00Bie
    jo, so wie auch alle anderen Funktionen, die mit C-Strings arbeiten auf Null-Terminierung achten. Das ist jetzt nichts neues. 🙄

    Aber da du die Strings ja in entschlüsselter Form ausgeben willst, hast du dann eh nichts mehr mit 0-Terminierung zu tun.



  • kingruedi schrieb:

    @N00Bie
    jo, so wie auch alle anderen Funktionen, die mit C-Strings arbeiten auf Null-Terminierung achten. Das ist jetzt nichts neues. 🙄

    Aber da du die Strings ja in entschlüsselter Form ausgeben willst, hast du dann eh nichts mehr mit 0-Terminierung zu tun.

    Naja, wenn ich meine Daten beispielsweise verschlüsselt in der Registry (ohne Übergabe der Größe) speichern würde, wäre bei 0 in dem Fall auch Schluss und sonst müsste ich ständig die echte Größe der Daten bereithalten, was beim Abrufen aus der Registry dann noch kniffliger wird



  • wenn du die Daten serialisieren willst, kannst du 0 Zeichen ja immer noch irgend wie escapen.

    Ich kenne mich zwar mit Windows nicht aus, aber es gibt doch sogar extra Funktionen um Binär Daten in der Registry zu speichern, damit sollte das doch eigentlich alles ohne Probleme gehen...


Anmelden zum Antworten