2013-04-24 3 views
2

Я пытаюсь зашифровать/дешифровать файл, но у меня есть проблема с ByteArrayOutputStream и CipherOutputStream. Я могу encrypt файл, но не может быть decrypt файла. Я пытаюсь закрыть Stream перед CipherOutputStream. Но объект ByteArrayOutputStream остается равным нулю, и он не кодирует любые байты после CipherOutputStream. Есть идеи? Большое спасибо.CipherOutputStream не может писать ByteArrayOutputStream

public static void encryptOrDecrypt(int mode, OutputStream os, InputStream is, String key) throws Throwable { 

    IvParameterSpec l_ivps; 
    l_ivps = new IvParameterSpec(IV, 0, IV.length); 

    DESKeySpec dks = new DESKeySpec(key.getBytes()); 
    SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); 
    SecretKey desKey = skf.generateSecret(dks); 
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 

    if (mode == Cipher.ENCRYPT_MODE) { 
     cipher.init(Cipher.ENCRYPT_MODE, desKey,l_ivps);  
     CipherInputStream cis = new CipherInputStream(is, cipher); 
     doCopy(cis, os); 
    } else if (mode == Cipher.DECRYPT_MODE) { 
     cipher.init(Cipher.DECRYPT_MODE, desKey,l_ivps);    
     CipherInputStream cis = new CipherInputStream(is, cipher);     
     doCopy(cis, os); 
     System.out.println("Decrypted"); 
    } 
} 

public static void doCopy(InputStream is, OutputStream os) throws IOException { 
    byte[] bytes = new byte[64]; 
    int numBytes; 
    System.out.println("doCopy Step1"); 
    System.out.println("is: "+is.read(bytes)); 
    while ((numBytes = is.read(bytes)) != -1) { 
     os.write(bytes, 0, numBytes); 
     System.out.println("doCopy Step2"); 
    } 
    os.flush(); 
    os.close(); 
    is.close(); 
} 

public static void writeFile(InputStream in){ 
    try { 
     String strContent;   
     BufferedReader bReader = new BufferedReader(new InputStreamReader(in)); 
     StringBuffer sbfFileContents = new StringBuffer(); 
     String line = null; 

     while((line = bReader.readLine()) != null){ 
      sbfFileContents.append(line); 
     } 
     System.out.println("File:"+sbfFileContents);    
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException ioe){ 

    } 
} 

ответ

4
os.close(); 

CipherOutputStream cos = new CipherOutputStream(os, cipher); 

Вы промывка и закрытие OutputStream, а затем использовать его в CiptherOutputStream

CiptherOutputStream Создать до этого.

+0

Я попытался закрыть и очистить выходной поток после CipherOutputStream. Но объект остается равным нулю. –

+0

@XoXo: Не могли бы вы опубликовать обновленный код? Кроме того, включите код для метода doCopy. – Ankit

+0

Ниже приведен обновленный код –

Смежные вопросы