2011-01-14 4 views
4

문자열을 암호화하고 ByteArrayOutputStream에 의해 뒷받침되는 CipherOutputStream을 사용하여 바이트의 기본 배열에 암호화 된 바이트를 저장하려고하지만 ByteArrayOutputStream 개체의 크기는 0으로 유지되고 무언가가 CipherOutputStream 개체에 기록 된 후 아무런 문제가 없습니다. 여기에 코드가 있습니다. CipherOutputStream이 ByteArrayOutputStream에 쓸 수없는 이유는 무엇입니까?

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
CipherOutputStream cos = new CipherOutputStream(out, c); 
PrintWriter pw = new PrintWriter(cos); 
pw.println("Write something"); 
cos.flush(); 
out.flush(); 
System.out.println(out.size()); 
pw.close(); 

그래서 나는 아래의 코드를 사용하여 FileOutputStreamByteArrayOutputStream을 변경하여 비교를 만들기 위해 노력했다. 암호화 된 바이트가 대상 파일에 기록된다는 것이 밝혀졌습니다. 누구도 왜 여기에 ByteArrayOutputStream을 사용할 수 없는지 알 수 있습니까? 해결책을 제안 할 수 있습니까? 종료 후 -

FileOutputStream out = new FileOutputStream("/path/encrypted.txt"); 
CipherOutputStream cos = new CipherOutputStream(out, c); 
PrintWriter pw = new PrintWriter(cos); 
pw.println("Write something"); 
pw.close(); 

답변

4

이들 단편의 유일한 차이점은 첫 번째 경우에 두 번째 경우에, 반면 스트림을 닫기 전에 콘텐츠를 확인하는 것이된다. 따라서 확인하기 전에 스트림을 닫아야합니다.

+0

사용

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 

는 여전히 비어 있습니다. 원래, 나는'PrintWriter'를 사용하지 않았지만'CipherOutputStream'에 직접 써서 같은 것을 만들어 냈습니다. 이것이 내가 너무 좌절 한 이유입니다. – gigadot

+0

@gigadot : 어쨌든 내용을 확인하기 전에 스트림을 닫으려고 했습니까? – axtavt

+0

예, 작동하지만 왜 작동합니까? 플러시 방법이 존재하는 이유는 무엇입니까? 어쨌든 감사합니다. – gigadot

0

문제는 암호입니다.

Cipher cipher = Cipher.getInstance("RSA"); 

패딩이 없습니다. 내가 플러시하더라도 대신

관련 문제