2017-10-13 1 views
0

J'ai un programme de coffre-fort qui utilise le code XOR ci-dessous pour stocker les noms d'utilisateur et les mots de passe dans un fichier texte. Chaque ligne contient un nom d'utilisateur et mot de passe paire, et ils sont délimités par une virgule, il suit ce format:Stockage du texte crypté

nom d'utilisateur, mot de passe

nom d'utilisateur, mot de passe

etc.

Le problème est que le chiffrement cryptera occasionnellement un caractère en virgule, alors quand j'essayerai de lire à nouveau le fichier, les données seront mal lues et elles seront essentiellement supprimées. Je pensais à résoudre ce problème en vérifiant si une virgule résultait du chiffrement XOR et si oui, l'incrémenter au caractère ASCII suivant "-", puis le renvoyer à une virgule lors de la lecture des données et le décrypter. Le problème que je vois avec cette solution est qu'elle peut provoquer des collisions avec des caractères qui sont chiffrés à un "-" tout de suite.

Quelqu'un peut-il penser à une solution à ce que je peux utiliser pour éviter la perte de données?

// 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

Ce sont des exemples de code qui font un chiffrement plus lourd de façon régulière. 'char' est UTF-16, et votre xoring ne fonctionnera probablement pas, soit lors du stockage/chargement, soit lors d'un problème Unicode (paires de substitution). Mots-clés: chiffrement de clé symétrique peut-être. –

+0

Même si j'utilise un autre algorithme de chiffrement plus fort, ne vais-je pas encore rencontrer ce problème avec le délimiteur? – Flaom

+4

Tout d'abord, abandonnez votre "chiffrement XOR" et utilisez un algorithme de chiffrement réel. Deuxièmement, opérer sur des tableaux d'octets, pas sur des chaînes. Troisièmement, coder le binaire chiffré résultant en encodage base64 (qui n'utilise pas de virgules). –

Répondre

0

Essayez DataOutputStream.writeUTF() à la sortie du texte dans un fichier au lieu de les stocker dans un fichier texte. Ensuite, vous pouvez utiliser DataInputStream.readUTF() pour lire le fichier. Vous n'avez pas à délimiter quoi que ce soit de cette façon