Вы должны прочитать InputStream, если вы собираетесь вычислять хеш на байтах, которые он содержит. Сначала прочитайте InputSteam в байт [].
При использовании Guava ByteStreams:
InputStream in = ...;
byte[] bytes = ByteStreams.toByteArray(in);
Альтернативный популярный способ сделать это - использовать Commons IO :
InputStream in = ...;
byte[] bytes = IOUtils.toByteArray(in);
Затем вы можете вызвать Arrays.hashCode () для байтового массива:
int hash = java.util.Arrays.hashCode(bytes);
Однако вы можете рассмотреть возможность использования SHA256 в качестве хэш-функции, поскольку вероятность возникновения коллизии у вас меньше:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] sha256Hash = digest.digest(bytes);
Если вы не хотите читать весь поток в байтовый массив в памяти, вы можете вычислить хэш, когда InputStream читается кем-то другим. Например, вы можете захотеть передать поток InputStream на диск в базу данных. Guava предоставляет класс, который упаковывает InputStream, который делает это для вас HashingInputStream :
Сначала оберните ваш InputStream с помощью HashinInputStream
HashingInputStream hin = new HashingInputStream(Hashing.sha256(), in);
Тогда пусть этот HashingInputStream будет прочитан так, как вам нравится
while(hin.read() != -1);
Затем получите хеш из HashingInputStream
byte[] sha256Hash = hin.hash().asBytes();