2017-10-13 2 views
0

Ich habe ein Passwort-Vault-Programm, das die XOR-Verschlüsselung unten verwendet, um Benutzernamen und Passwörter in einer Textdatei zu speichern. Jede Zeile enthält einen Benutzernamen und ein Passwort-Paar, und sie sind mit einem Komma begrenzt, so dass es folgendes Format:Gespeicherten verschlüsselten Text speichern

Benutzername, Passwort

Benutzername, Passwort

usw.

Das Problem ist, dass die Chiffre gelegentlich ein Zeichen in ein Komma verschlüsselt. Wenn ich versuche, die Datei erneut zu lesen, werden die Daten falsch gelesen und im Wesentlichen gelöscht.

Ich habe darüber nachgedacht, dies zu lösen, indem ich überprüfe, ob ein Komma aus der XOR-Chiffre resultiert, und wenn ja, inkrementiere es zum nächsten ASCII-Zeichen "-" und gebe es dann beim Lesen der Daten zurück zu einem Komma entschlüsseln. Das Problem, das ich bei dieser Lösung sehe, ist, dass es zu Kollisionen mit Zeichen kommen kann, die sofort zu einem "-" verschlüsselt werden.

Kann mir jemand eine Lösung vorstellen, mit der ich verhindern kann, dass Daten verloren gehen?

// XOR cipher 
    public static String encryptDecrypt(String input, String pass) { 
     char[] key = pass.toCharArray(); 
     StringBuilder output = new StringBuilder(); 
     for (int i = 0; i < input.length(); i++) { 
      output.append((char) (input.charAt(i)^key[i % key.length])); 
     } 
     return output.toString(); 
    } 
+1

Das sind Codebeispiele, die eine stärkere Verschlüsselung regelmäßig durchführen. 'char' ist UTF-16, und Ihr Xoring wird wahrscheinlich nicht funktionieren, entweder beim Speichern/Laden, wenn Sie ein Unicode-Problem verursachen (Ersatzpaare). Stichwort: symmetrische Schlüsselverschlüsselung vielleicht. –

+0

Auch wenn ich einen anderen Verschlüsselungsalgorithmus verwende, der stärker ist, werde ich noch auf dieses Problem stoßen, das ich mit dem Begrenzer habe? – Flaom

+4

Zuerst, Graben Sie Ihre "XOR-Verschlüsselung" und verwenden Sie einen tatsächlichen Verschlüsselungsalgorithmus. Zweitens, operiere auf Byte-Arrays, nicht auf Strings. Drittens, kodiere die resultierende Chiffretext-Binärdatei in die base64-Kodierung (die keine Kommas verwendet). –

Antwort

0

Try DataOutputStream.writeUTF(), der Text in eine Datei, anstatt sie in einer Textdatei zur Ausgabe zu speichern. Dann können Sie DataInputStream.readUTF() verwenden, um aus der Datei zu lesen. Sie müssen auf diese Weise nichts abgrenzen

Verwandte Themen