代码之家  ›  专栏  ›  技术社区  ›  meeza

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

  •  2
  • meeza  · 技术社区  · 8 年前

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   meeza    8 年前

    可以在Java中通过以下步骤实现:

    1. 获取S3对象的InputStream
    2. 对SHA-256哈希(或SHA-1或MD5)使用MessageDigest和DigestInputStream类

    以下是有关如何执行此操作的代码段:

    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; 
    }