2012-09-01 26 views
5

एन्क्रिप्ट और डिक्रिप्ट करें मुझे इसे एन्क्रिप्ट करके फ़ाइल में तारों की सरणी सूची को स्टोर करने की आवश्यकता है। और फिर मैं फ़ाइल सामग्री को डिक्रिप्ट करता हूं और उन्हें सरणी सूची में पुनर्स्थापित करता हूं। लेकिन जब मैं सामग्री को डिक्रिप्ट करता हूं, तो सामग्री के अंदर 'नल' के ब्लॉक होते हैं। बिना 'नल' ब्लॉक के साथ, शेष टेक्स्ट वही है जैसा मैंने एन्कोड किया था।एरेलेलिस्ट <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; 
} 

मैं UTF-16 के साथ करने की कोशिश की जब से तार UTF-16 में जावा में इनकोड, लेकिन यह केवल उत्पादन सबसे खराब कर देता है। आपके सुझाव की सराहना की होगी ... धन्यवाद

+6

कभी भी स्रोत कोड की तस्वीरें न लें और उन्हें पोस्ट करें। या तो कॉपी करें + स्रोत कोड को अपने प्रश्न में पेस्ट करें या इसे टाइप करने के लिए समय दें। – Jeffrey

+0

समस्या स्थिति में स्थित हो सकती है (242, 137) – Alex

+1

@ जेफरी यदि संभव हो तो, मैं प्रतिलिपि/पेस्ट के साथ जाऊंगा। यदि यह संभव नहीं था क्योंकि मैं 'किंडल पर था' या कुछ ऐसे, मैं शायद एक सवाल पूछने में देरी करूँगा जब तक कि मैं डेस्कटॉप विकास मशीन पर वापस नहीं आ जाता। टाइपिंग कोड (जब) ​​में बहुत सारी त्रुटियां रेंगती हैं। –

उत्तर

4

मैं कोड जहां आप के लिए और एक स्ट्रिंग से अपनी सूची सामग्री परिवर्तित बाहर चीर होता है, और ObjectOutputStream साथ बदलें: फिर

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

, पढ़ने के लिए पीछे:

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

हां यह काम करता है। अपना रास्ता उपयोग करके, इसे सूची में और प्रत्येक स्ट्रिंग के माध्यम से पार करने की आवश्यकता नहीं है। तो मुझे एन्कोडिंग सामान के बारे में बिल्कुल विचार करने की आवश्यकता नहीं है। मैं इसे एक वस्तु के रूप में भेज सकता हूं और इसे आसानी से पढ़ सकता हूं। यह कोड की लाइनों की महत्वपूर्ण मात्रा को कम करता है। धन्यवाद – Anuruddha