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

标签 java amazon-web-services amazon-s3 checksum sha

开箱即用的 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; 
}

关于java - 如何计算S3文件内容的SHA-256校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50226112/

相关文章:

php - 如何授予多个用户访问单个 Amazon S3 账户的权限并确定谁添加了文件?

java - 调用 ICS 电话上的“其他”菜单?

java - 使用 Spring 访问 XmlBeanFactory 的更好设计

amazon-web-services - aws s3 或 sqs 客户端中 withRegion() 和 withEndpointConfiguration() 方法的区别

amazon-web-services - 我不想将 eip 附加到我的 Chef 客户

php - Laravel 5 中 S3 flysystem 适配器的路径不正确

java - 多次为 : tablename 添加 SQL 字符串

java - 自定义 ImageView 不显示图像

python - AWS S3通过boto - 检查磁盘空间

c# - 根据通配符判断对象是否存在于S3 bucket中