【发布时间】:2015-09-14 07:12:11
【问题描述】:
当我在本地文件系统和 S3 上比较同一个文件时,我得到相同的 MD5 和,唯一的区别是 S3 在左侧填充了一个额外的“0”?
知道为什么会发生这种情况,但并非所有文件都是这种情况,仅适用于少数文件。
这是本地文件
jabir: > echo '7f4d91c02fd8709186bf682bc811e16' |wc
1 1 32
这是 s3 上的对象
jabir : > echo '07f4d91c02fd8709186bf682bc811e16' |wc 1 1 33
这是我用来获取 md5(远程)的代码
ObjectMetadata objectMetadata = s3Client.getObjectMetadata(bucketName, key);
String destMd5 = objectMetadata.getETag().toString();
(本地
)
public static String getFileMD5(InputStream is) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
int numOfBytesRead;
byte[] buffer = new byte[8192];
while ((numOfBytesRead = is.read(buffer)) > 0) {
md.update(buffer, 0, numOfBytesRead);
}
} catch (NoSuchAlgorithmException e) {
logStatic.error(e);
} catch (IOException e) {
logStatic.error(e);
}
byte[] digest = md.digest();
BigInteger bigInt = new BigInteger(1, digest);
String output = bigInt.toString(16);
return output;
}
【问题讨论】: