2011-01-14 3 views
4

Я пытаюсь зашифровать строку и хранить зашифрованные байты в примитивном массиве байтов, используя CipherOutputStream, который поддерживается ByteArrayOutputStream, но размер объекта ByteArrayOutputStream остается равным нулю, и он не кодирует никаких байтов после того, как что-то записано в 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(); 

Так что я попытался сделать сравнение путем изменения ByteArrayOutputStream к FileOutputStream, используя этот код. Оказалось, что зашифрованные байты записываются в целевой файл. Кто-нибудь знает, почему я не могу использовать 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

Даже если я смывать, он по-прежнему пуст. Первоначально я не использую 'PrintWriter', а пишу прямо в' CipherOutputStream', который тоже получается. Вот почему я так расстроен. – gigadot

+0

@gigadot: Во всяком случае, вы пытались закрыть поток перед проверкой содержимого? – axtavt

+0

Да, это работает, но почему? Я думал, что промывка должна делать то же самое, почему метод флеша существует? В любом случае, спасибо. – gigadot

0

Проблема заключается в шифровании.

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

Не имеет набивки. Использование

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

вместо

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