来自本地文件的MD5和来自S3的MD5(eTag)不一样

oky*_*eni 8 java md5 amazon-s3 md5sum

我获得了本地文件的MD5,但它与Amazon S3中"相同"文件的MD5(eTag)不同.我想要实现的是弄清楚我在S3中的最新文件是否与我本地的文件相同.如果我无法比较MD5,那我该怎么做呢?

从本地文件生成MD5(截断代码):

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5 = Files.getDigest(localFile, md);
String hashtext = DigestUtils.md5Hex(md5);
Run Code Online (Sandbox Code Playgroud)

从S3(截断代码)中检索MD5(eTag):

ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName));
List<S3ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for(S3ObjectSummary objectSummary : objectSummaries) {
    String MD5 = objectSummary.getETag();
}
Run Code Online (Sandbox Code Playgroud)

PS:我使用org.apache.commons.codec.digest.DigestUtilscom.google.common.io.Files库.

Bru*_*hée 11

String hashtext = DigestUtils.md5Hex(md5);
Run Code Online (Sandbox Code Playgroud)

是否计算刚刚计算出的MD5的MD5.请参阅DigestUtils.md5Hex文档.

hashtext 实际上是MD5(MD5(文件))而不是MD5(文件).