Почему CipherOutputStream не может записать в ByteArrayOutputStream? - PullRequest
4 голосов
/ 14 января 2011

Я пытаюсь зашифровать строку и сохранить зашифрованные байты в примитивном массиве байтов, используя CipherOutputStream, который поддерживается ByteArrayOutputStream, но размер объекта ByteArrayOutputStream остается нулевым и не содержит никаких байтов после чего-либо записано в CipherOutputStream объект. Вот код.

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();

Ответы [ 2 ]

4 голосов
/ 14 января 2011

Единственная разница между этими фрагментами состоит в том, что в первом случае вы проверяете содержимое перед закрытием потока, а во втором - после закрытия.Итак, я думаю, вам нужно закрыть поток перед проверкой.

0 голосов
/ 09 июня 2015

Проблема в шифре.

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

Не имеет отступов. Используйте

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

вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...