如何计算S3文件内容的SHA-256校验和

开箱即用的S3提供S3对象内容的MD5校验和。 但我需要计算文件内容的SHA-256校验和。 该文件可能足够大,所以我不想在内存中加载文件并计算校验和,而是我需要一个解决方案来计算校验和而不将整个文件加载到内存中。

它可以通过以下Java步骤来实现:

  1. 获取S3对象的InputStream
  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; }