如何计算S3文件内容的SHA-256校验和
开箱即用的S3提供S3对象内容的MD5校验和。 但我需要计算文件内容的SHA-256校验和。 该文件可能足够大,所以我不想在内存中加载文件并计算校验和,而是我需要一个解决方案来计算校验和而不将整个文件加载到内存中。
它可以通过以下Java步骤来实现:
- 获取S3对象的InputStream
- 使用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; }
- 如何通过CloudFront将对象放到S3
- 从S3下载文件> 3Gb失败,出现“SocketTimeoutException:Read timed out”
- 如何更新现有Amazon S3文件的元数据?
- Amazon Web Services(AWS)S3 Java创建子目录(对象)
- 将大文件上载到Amazon S3时出现问题
- 使用AWS Java SDK为现有S3对象设置Expires标头
- S3 Java客户端因“Content-Length delimited message body的过早结束”或“java.net.SocketException Socket closed”而失败了很多
- 与csv文件相比,将mysql表转换为spark数据集的速度非常慢
- AWS S3 – 列出没有前缀的文件夹中的所有对象