Как вычислить md5 контрольную сумму на каталог с Java или отличный?

Я надеюсь использовать Java или отличный для получения md5 контрольной суммы полного списка.

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

Я нахожу этот сценарий для файлов, но как сделать то же самое с каталогами?

import java.security.MessageDigest

def generateMD5(final file) {
    MessageDigest digest = MessageDigest.getInstance("MD5")
    file.withInputStream(){ is ->
        byte[] buffer = new byte[8192]
        int read = 0
        while( (read = is.read(buffer)) > 0) {
            digest.update(buffer, 0, read);
        }
    }
    byte[] md5sum = digest.digest()
    BigInteger bigInt = new BigInteger(1, md5sum)

    return bigInt.toString(16).padLeft(32, '0')
}

Существует ли лучший подход?

5
задан Andrii Abramov 16 June 2017 в 09:50
поделиться

2 ответа

Я сделал функцию для вычисления контрольной суммы MD5 по директории :

Сначала я использую FastMD5: http://www.twmacinta.com/myjava/fast_md5.php

Вот мой код:

  def MD5HashDirectory(String fileDir) {
    MD5 md5 = new MD5();
    new File(fileDir).eachFileRecurse{ file ->
      if (file.isFile()) {
        String hashFile = MD5.asHex(MD5.getHash(new File(file.path)));
        md5.Update(hashFile, null);
      }

    }
    String hashFolder = md5.asHex();
    return hashFolder
  }
4
ответ дан 18 December 2019 в 09:05
поделиться

Неясно, что значит принимать md5sum каталога. Возможно, вам нужна контрольная сумма списка файлов; может потребоваться контрольная сумма списков файлов и их содержимое. Если вы уже суммируете сами данные файла, я бы предложил вам указать однозначное представление для списка каталогов (следите за злыми символами в именах файлов), а затем вычисляйте и хэшировать это каждый раз. Вам также нужно подумать о том, как вы будете обрабатывать специальные файлы (сокеты, каналы, устройства и символические ссылки в мире Unix; NTFS имеет файловые потоки, и я считаю, что это что-то похожее на символические ссылки).

0
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: