java - 来自本地文件的 MD5 和来自 S3 的 MD5 (eTag) 不相同

标签 java amazon-s3 md5 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);

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

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

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

最佳答案

String hashtext = DigestUtils.md5Hex(md5);

计算你刚刚计算的 MD5 的 MD5。参见 DigestUtils.md5Hex documentation .

hashtext 实际上是 MD5(MD5(file)) 而不是 MD5(file)。

关于java - 来自本地文件的 MD5 和来自 S3 的 MD5 (eTag) 不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256434/

相关文章:

security - 更改预先存在的数据库上的散列函数

java - 如何计算带有集合的列表中的项目出现次数?

python-2.7 - 使用boto将目录上传到s3

java - java中的MD5校验和问题

ruby-on-rails - 无法解密config/credentials.yml.enc。也许您输入了错误的 key ?

arrays - 循环遍历多个图像的数组以单独上传到AWS s3 ReactJS

node.js - 将 S3 对象的内容流式传输到哈希算法 node.js

java - 从运行时编译的类调用抽象类的重写方法时出现 AbstractMethodError

Java StringTokenizer 严格遵守五个空白字符,仅此而已

java - Neo4j 客户端-服务器 API