Fehler bei der zufälligen Textverschleierung

8

Ich habe mit einem einfachen XOR-basierten Textverschleierungsalgorithmus experimentiert. Wenn der Algorithmus zweimal in einer Serie ausgeführt wird, sollte ich angeblich die ursprüngliche Eingabe zurückerhalten - in meiner Implementierung geschieht dies jedoch manchmal. Hier ist mein Code, mit ein paar zufälligen Text, um das Problem zu demonstrieren:

%Vor%

Wie kann ich diesen Algorithmus so korrigieren, dass er tatsächlich seine eigene Umkehrung ist? Irgendwelche Vorschläge, um den Grad der Verschleierung zu verbessern?

    
thkala 01.04.2011, 19:57
quelle

4 Antworten

6

Ich sehe hier zwei Probleme:

  1. Die Operation + 0xfe ist keine eigene Inverse. Wenn Sie es entfernen und nur XORs belassen, wird jedes Byte wie erwartet auf seinen ursprünglichen Wert zurückgesetzt.

  2. Ein subtileres Problem: Das Verschlüsseln des Textes könnte ein Null-Byte erzeugen, das den Text abschneidet, weil Sie Zeichenketten mit Null-Endung verwenden. Die beste Lösung ist wahrscheinlich, die Textlänge getrennt zu speichern, anstatt den verschlüsselten Text zu beenden.

interjay 01.04.2011, 20:02
quelle
3

Sie tun mehr als nur ein einfaches XOR (wenn Sie es bei text[i] = text[i] ^ (char)0x41 belassen hätten, würde es funktionieren; Sie könnten sogar in ^ p bleiben, wenn Sie wollen, aber + 0xfe bricht es) / p>

Warum möchten Sie diese Art von Textverschleierung verwenden? Übliche Methoden der nicht sicheren Verschleierung sind Base64 (benötigt separate Kodierung und Dekodierung) und Rot13 (Anwendung ein zweites Mal, um umzukehren).

    
Jonathan 01.04.2011 20:02
quelle
2

Zuerst, um

zu dekodieren %Vor%

Sie benötigen ihre Umkehrfunktion, das wäre

%Vor%

Zweitens, char i kann nur mit kurzen Strings arbeiten, benutze int .

Und zuletzt (und am wichtigsten!) ist, dass nach einer solchen "Verschleierung" die Zeichenkette vor ihrem ursprünglichen Ende null abgeschlossen werden könnte. Sie sollten also ihre ursprüngliche Länge überprüfen oder sicherstellen, dass Sie keine Nullen in der Mitte bekommen.

    
ruslik 01.04.2011 20:04
quelle
1

Warum "+ 0xfe hinzufügen"? Das ist (mindestens) eine Quelle Ihrer Nicht-Reversibilität.

Ich sehe, dass Sie es verschleiern, indem Sie XOR des vorherigen Textwerts p verwenden, was bedeutet, dass wiederholte Buchstaben zwischen den Werten hin und her springen.

    
Andy Finkenstadt 01.04.2011 20:01
quelle

Tags und Links