2012-09-01 16 views
5

Ich muss eine Array-Liste von Zeichenfolgen in einer Datei speichern, indem Sie es verschlüsseln. Und dann entschlüssele ich den Dateiinhalt und stelle sie in eine Array-Liste wieder her. Aber wenn ich den Inhalt entschlüssle, sind Blöcke von 'Null' innerhalb des Inhalts vorhanden. Ohne 'Null'-Blöcke ist der Rest des Textes derselbe wie ich codiert habe.Verschlüsseln und Entschlüsseln einer ArrayList <String>

public static void encryptFile(List<String> moduleList, File fileOut) { 
    try { 
     OutputStream out = new FileOutputStream(fileOut); 
     out = new CipherOutputStream(out, encryptCipher); 
     StringBuilder moduleSet = new StringBuilder(); 
     for (String module : moduleList) { 
      moduleSet.append(module + "#"); 
     } 
     out.write(moduleSet.toString().getBytes(Charset.forName("UTF-8"))); 
     out.flush(); 
     out.close(); 
    } catch (java.io.IOException ex) { 
     System.out.println("Exception: " + ex.getMessage()); 
    } 
} 

public static List<String> decryptFile(File fileIn) { 
    List<String> moduleList = new ArrayList<String>(); 
    byte[] buf = new byte[16]; 

    try { 
     InputStream in = new FileInputStream(fileIn); 
     in = new CipherInputStream(in, decryptCipher); 

     int numRead = 0; 
     int counter = 0; 
     StringBuilder moduleSet = new StringBuilder(); 
     while ((numRead = in.read(buf)) >= 0) { 
      counter++; 
      moduleSet.append(new String(buf)); 
     } 

     String[] blocks = moduleSet.split("#"); 
     System.out.println("Items: " + blocks.length); 

    } catch (java.io.IOException ex) { 
     System.out.println("Exception: " + ex.getMessage()); 
    } 
    return moduleList; 
} 

Ich habe versucht, mit UTF-16, da Strings in Java in UTF-16 codiert werden, aber es macht nur die Ausgabe Schlimmste. Ihre Vorschläge sei darauf hingewiesen, ... Dank

+6

Niemals Bilder des Quellcodes machen und diese veröffentlichen. Kopieren Sie den Quellcode und fügen Sie ihn in Ihre Frage ein oder nehmen Sie sich die Zeit, ihn einzugeben. – Jeffrey

+0

Problem kann an Position (242, 137) – Alex

+1

@ Jeffrey Wenn ich überhaupt möglich wäre, würde ich mit Kopieren und Einfügen gehen. Wenn das nicht möglich wäre, weil ich "auf dem Kindle" oder so etwas war, würde ich wahrscheinlich eine Frage stellen, bis ich wieder auf dem Desktop-Entwicklungscomputer war. Bei der (erneuten) Eingabe von Code schleichen sich zu viele Fehler ein. –

Antwort

4

Ich würde den Code herausreißen, wo Sie Ihre Liste Inhalt und aus einer Zeichenfolge zu konvertieren, und ersetzen Sie es mit ObjectOutputStream:

FileOutputStream out1 = new FileOutputStream(fileOut); 
CipherOutputStream out2 = new CipherOutputStream(out1, encryptCipher); 
ObjectOutputStream out3 = new ObjectOutputStream(out2); 
out3.writeObject(moduleList); 

Dann lesen zurück:

FileInputStream in1 = new FileInputStream(fileIn); 
CipherInputStream in2 = new CipherInputStream(in1, decryptCipher); 
ObjectInputStream in3 = new ObjectInputStream(in2); 
moduleList = (Set<String>)in3.readObject() 
+0

Ja, es hat funktioniert. Indem Sie Ihren Weg benutzen, müssen Sie nicht jeden String in der Liste durchlaufen und senden. Also muss ich überhaupt nicht über das Codieren nachdenken. Ich kann es als ein Objekt senden und es leicht lesen. Es reduziert die Anzahl der Codezeilen. Vielen Dank – Anuruddha

Verwandte Themen