Вычислить две разные подписи дайджеста для одного и того же InputStream - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть InputStream входящего соединения Http (поступающего через объект javax.servlet.http.HttpServletRequest).Пока он используется / обрабатывается, из него создается дайджест сообщения SHA_512.Это текущее состояние реализации, которое я не могу изменить.

Из-за требований моей задачи мне необходимо ТАКЖЕ вычислить сигнатуру дайджеста MD5 для того же контента .

Единственный способ, которым я смог это сделать, - это сохранить исходное содержимое в байтовом массиве, а затем просто создать из него два отдельных ByteArrayInputStreams и переварить их.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(request.getInputStream(), baos);

byte[] originalContent = baos.toByteArray();

InputStream is1 = new ByteArrayInputStream(originalContent);
// is1 being processed, SHA_512 calculated...

DigestInputStream dis2 = new DigestInputStream(new ByteArrayInputStream(originalContent), MessageDigest.getInstance("MD5"));
IOUtils.toByteArray(dis);
String myMD5 = BinaryUtils.toHex(dis.getMessageDigest().digest());

Есть ли другой, более эффективный способ?

Спасибо.

...