Как рассчитать контрольную сумму SHA-256 содержимого файла S3 - PullRequest
0 голосов
/ 08 мая 2018

S3 из коробки предоставляет контрольную сумму MD5 содержимого объекта S3. Но мне нужно вычислить контрольную сумму SHA-256 содержимого файла. Файл может быть достаточно большим, поэтому я не хочу загружать файл в память и вычислять контрольную сумму, вместо этого мне нужно решение для вычисления контрольной суммы без загрузки всего файла в памяти.

1 Ответ

0 голосов
/ 08 мая 2018

Это может быть достигнуто следующими шагами в Java:

  1. Получить InputStream объекта S3
  2. Используйте классы MessageDigest и DigestInputStream для хэша SHA-256 (или SHA-1 или MD5)

Ниже приведен фрагмент о том, как это сделать:

String getS3FileHash(AmazonS3 amazonS3, String s3bucket, String filePath) {
    try {
        InputStream inputStream = amazonS3.getObject(s3bucket, filePath).getObjectContent();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        DigestInputStream digestInputStream = new DigestInputStream(inputStream, messageDigest);
        byte[] buffer = new byte[4096];
        int count = 0;
        while (digestInputStream.read(buffer) > -1) {
            count++;
        }
        log.info("total read: " + count);
        MessageDigest digest = digestInputStream.getMessageDigest();
        digestInputStream.close();
        byte[] md5 = digest.digest();
        StringBuilder sb = new StringBuilder();
        for (byte b: md5) {
            sb.append(String.format("%02X", b));
        }
        return sb.toString().toLowerCase();
    } catch (Exception e) {
        log.error(e);
    }
    return null; 
}
...