笔者所在项目采用Azure Blob来作为文件存储解决方案, 上传的大文件需要一种机制来验证文件的完整性, 而业内通用的解决方案就是用MD5来做校验.
Azure Blob在我们上传文件且没有指定Content MD5时, 就会自动帮我们计算文件的MD5值.
通过Microsoft Azure Storage Explorer工具右键查看任何文件的Properties时, 可以看到该文件的MD5值

但是该文件通过文件MD5在线计算工具得到的结果却大相径庭

通过调查得知Azure Blob的Content MD5有自己的计算方式(WTF???!!!)

通过不断Bing Search & Coding, 终于在本地算出来了和Azure Blob一样的MD5值


一共三步:
@Test
void testAzureBlobMD5() {
//计算文件MD5
String md5String = null;
try (FileInputStream inputStream = new FileInputStream({yourFilePath})) {
md5String = DigestUtils.md5DigestAsHex(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("md5String: " + md5String);
//16进制String转bytes数组
byte[] bytes = HexUtils.fromHexString(md5String);
//base64编码
String blobMD5 = Base64.getEncoder().encodeToString(bytes);
System.out.println("blobMD5: " + blobMD5);
}