Часто разработчикам приходится сталкиваться с задачей получения контрольной суммы (checksum) файла. Это может быть необходимо для проверки целостности файла, для сравнения двух файлов, для генерации уникального идентификатора файла и многих других целей. MD5 (Message-Digest Algorithm 5) — это широко используемый алгоритм, который генерирует 128-битный (16-байтный) хеш-значение. Это обычно выражается как 32-значное шестнадцатеричное число.
Вот пример кода, который позволяет получить MD5 контрольную сумму файла в Java:
import java.io.*; import java.security.*; public class ChecksumMD5 { public static void main(String[] args) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream("myfile.txt"); byte[] dataBytes = new byte[1024]; int nread = 0; while ((nread = fis.read(dataBytes)) != -1) { md.update(dataBytes, 0, nread); }; byte[] mdbytes = md.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < mdbytes.length; i++) { sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1)); } System.out.println("Digest(in hex format):: " + sb.toString()); } }
В этом примере мы создаем экземпляр MessageDigest, используя статический метод getInstance() и передавая ему строку «MD5», указывающую, что мы хотим использовать алгоритм MD5. Затем мы открываем файл ‘myfile.txt’ на чтение и читаем его по блокам по 1024 байта. Каждый прочитанный блок добавляется в MessageDigest с помощью метода update().
После того как все блоки файла были прочитаны и добавлены в MessageDigest, мы вызываем метод digest(), который возвращает массив байтов, представляющих хеш-значение. Затем мы конвертируем этот массив байтов в строку в шестнадцатеричном формате.
Полученная строка и есть контрольная сумма MD5 файла.
Добавить комментарий