Контрольная сумма файла Java – примеры хэшей MD5 и SHA-256

Хэш контрольной суммы — это зашифрованная последовательность символов, полученная после применения определенных алгоритмов и манипуляций с пользовательским контентом. В этом руководстве по хешированию Java мы научимся генерировать хэш контрольной суммы для файлов.

1. Зачем генерировать контрольную сумму файла?

Любой серьезный поставщик файлов предоставляет механизм для проверки контрольной суммы своих загружаемых файлов. Контрольная сумма — это форма механизма, гарантирующая, что загруженный нами файл загружен правильно.

Контрольная сумма действует как доказательство действительности файла, поэтому, если файл поврежден, эта контрольная сумма изменится и, таким образом, даст нам знать, что это не тот же самый файл или файл был скомпрометирован между передачами по какой-либо причине.

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

Подробнее: Примеры Java MD5, SHA, PBKDF2, BCrypt и SCrypt

Чтобы создать контрольную сумму для файла, нам нужно будет прочитать содержимое файла, а затем сгенерировать для него хэш, используя один из следующих методов. Обратите внимание, что оба подхода поддерживают все типы алгоритмов, поэтому мы можем использовать тот же код для других алгоритмов, таких как HmacMd5, SHA, SHA-512 и т. д.

2. Генерация контрольной суммы файла с помощью MessageDigest

Класс MessageDigest предоставляет приложениям функциональность алгоритма дайджеста сообщений, например MD5 или SHA-256. Его метод getInstance() возвращает объект MessageDigest, реализующий указанный алгоритм дайджеста.

Пример 1: Генерация MD5-хеша для файла в Java

Path filePath = Path.of("c:/temp/testOut.txt");byte[] data = Files.readAllBytes(Paths.get(filePath));byte[] hash = MessageDigest.getInstance("MD5").digest(data);String checksum = new BigInteger(1, hash).toString(16);

Пример 2: Генерация хеша SHA-256 для файла на Java

 Путь к файлуPath = Path.of("c:/temp/testOut.txt");byte[] данные = Files.readAllBytes(Paths.get(filePath));byte[] хэш = MessageDigest.getInstance("SHA-256").digest(data);Контрольная сумма строки = new BigInteger(1, hash).toString(16);

3. Генерация контрольной суммы файла с помощью Guava

В Google Guava метод ByteSource.hash() хеширует содержимое с указанной хеш-функцией в качестве аргумента метода.

Начните с добавления последней версии Guava в classpath проекта.

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version></dependency> 

Теперь мы можем использовать функцию hash() следующим образом.

Пример 1: Генерация MD5-хеша для файла в Java

File file = new File("c:/temp/test.txt");ByteSource byteSource = com.google.common.io.Files.asByteSource(file);HashCode hc = byteSource.hash(Hashing.md5());String checksum = hc.toString();

Пример 2: Генерация хеша SHA-256 для файла на Java

File file = new File("c:/temp/test.txt");ByteSource byteSource = com.google.common.io.Files.asByteSource(file);HashCode hc = byteSource.hash(Hashing.sha256());String checksum = hc.toString();

Если что-то требует дополнительных пояснений, напишите мне в комментариях.

Исходный код на Github

Прокрутить вверх