У меня есть функция шифрования, которая всегда хорошо работала в различных средах, но в последнее время она кашляла странные результаты.Шифрование усечено
Вот код:
public static byte[] Encrypt(String pstrInput) throws Exception {
ByteArrayOutputStream ms;
CipherOutputStream encStream;
OutputStreamWriter sw;
byte[] buffer;
ms = new ByteArrayOutputStream();
encStream = new CipherOutputStream(ms, getEncCipher());
sw = new OutputStreamWriter(encStream);
try {
sw.write(pstrInput);
sw.write("\r\n");
sw.close();
encStream.close();
ms.close();
buffer = ms.toByteArray();
} catch(IOException e) {
throw new Exception("Unexpected IO errors in Security Encrypt", e);
}
return buffer;
}
Проблема заключается в том, что в некоторых средах, buffer
будет обрезан до 8 байт, и я понятия не имею, почему.
Я могу воспроизвести проблему на моей машине, комментируя строку encStream.close()
, но я также не знаю, почему.
Насколько я знаю, машины, о которых идет речь (dev и QA), работают на одном и том же JVM (OpenJDK 1.7 64-bit). Единственное различие заключается в том, что dev-машина работает с кодом внутри Eclipse's Jetty, а QA работает с Tomcat, но это не должно меняться ...
Любые указатели?
'0x3A28213A' ' '0x6339392C' 0x7363682E' – rbrtl
Почему не вы закрываете потоки и писатель окончательно блокировать? –
@AdriaanKoster Лучшие практики приятные и все, но я должен закрыть поток шифрования, где я это делаю, или он усекает. Усечение - это поведение, которое я пытаюсь понять и устранить. Закрытие в блоке finally не работает. –