Я пытаюсь написать метод в тестовой среде, чтобы заставить его работать, прежде чем использовать его в моем проекте. Этот метод должен взять строку, превратить ее в байты (используя кодировку UTF-8), запустить ее через AES CipherOutputStream
, а затем снова перевести ее в строку (опять же с UTF-8).Запись на мой CipherStream не записывается в мой ByteArrayOutputStream
Моя проблема в том, что я действительно не понимаю, как работают потоки. Я видел примеры перехода из одного файла в другой, но это не то, что я хочу. Вместо FileOutputStream
у меня есть ByteArrayOutputStream
; однако кажется, что он никогда даже не дает этому потоку ничего, потому что когда я его читаю, он пуст.
String encrypt(String raw)
{
String encrypted = "";
ByteArrayOutputStream out = new ByteArrayOutputStream();
CipherOutputStream cipherStream = new CipherOutputStream(out, this.a);
try
{
cipherStream.write(raw.getBytes(Charset.forName("UTF-8")));
encrypted += new String(out.toByteArray(), Charset.forName("UTF-8"));
out.close();
cipherStream.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return encrypted;
}
Просьба игнорировать все уродливые общие блоки catch - я буду правильно обрабатывать исключения позже. (Нет, я не получаю никаких исключений прямо сейчас.)
Я предположил, что поток шифрования будет шифровать байты, а затем записать их в поток, предоставленный в конструкторе, но по какой-то причине он просто всасывает их и никогда не дает их обратно.
Любые идеи относительно того, где я это привожу?
Спасибо! Кроме того, я не собираюсь использовать метод, который возвращает строку. Я только сделал это, чтобы распечатать его и посмотреть. – RogueCSDev