我注意到的一个问题是,从 S3 API 返回的文件的
etag
与存储在该文件数据库中的 Blob 记录中的
checksum
不同。我在此网站上运行了 MD5 校验和:
https://appdevtools.com/checksum-calculator 来查找该文件,它与 S3 etag
匹配。为什么存储在 DB blob 中的
checksum
不同?测试文件.png:
Amazon S3 eTag via API: f1d0a62d6890cf4c4ecb4337c6d789df
`checksum` in Database: 8dCmLWiQz0xOy0M3xteJ3w==
MD5 Checksum when checking on website: f1d0a62d6890cf4c4ecb4337c6d789df
任何人都可以解释一下这一点以及数据库中的内容与文件有何关系吗?谢谢
值
"f1d0a62d6890cf4c4ecb4337c6d789df"
是一个十六进制字符串。值
"8dCmLWiQz0xOy0M3xteJ3w=="
是一个base64编码的字符串。两者都代表校验和的相同原始字节。
从 Base64 转换为十六进制:
Base64.decode64('8dCmLWiQz0xOy0M3xteJ3w==').unpack('H*')
=> ["f1d0a62d6890cf4c4ecb4337c6d789df"]
从十六进制转换为base64:
Base64.encode64(["f1d0a62d6890cf4c4ecb4337c6d789df"].pack('H*')).chomp
=> "8dCmLWiQz0xOy0M3xteJ3w=="