ruby-on-rails 活动存储校验和混淆

6ss1mwsb  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(57)

我刚刚使用Active Storage上传了一个测试文件(png图像)到Amazon S3。
我注意到的一个想法是,从S3 API返回的文件的etag与存储在该文件数据库中的blob记录中的checksum不同。
我在这个网站上运行了MD5校验和:https://appdevtools.com/checksum-calculator的文件,它匹配S3 etag
为什么存储在DB blob中的checksum不同?
test-file.png:

Amazon S3 eTag via API:                  f1d0a62d6890cf4c4ecb4337c6d789df
`checksum` in Database:                  8dCmLWiQz0xOy0M3xteJ3w==
MD5 Checksum when checking on website:   f1d0a62d6890cf4c4ecb4337c6d789df

字符串
有谁能解释一下这个问题,以及数据库中的一个与文件有什么关系?
谢谢

slsn1g29

slsn1g291#

它是相同的值,但存储方式不同。
"f1d0a62d6890cf4c4ecb4337c6d789df"是一个十六进制字符串。
"8dCmLWiQz0xOy0M3xteJ3w=="是一个base64编码的字符串。
两者都表示校验和的相同原始字节。
从base64转换为hex:

Base64.decode64('8dCmLWiQz0xOy0M3xteJ3w==').unpack('H*')
 => ["f1d0a62d6890cf4c4ecb4337c6d789df"]

字符串
从hex转换为base64:

Base64.encode64(["f1d0a62d6890cf4c4ecb4337c6d789df"].pack('H*')).chomp
 => "8dCmLWiQz0xOy0M3xteJ3w=="

相关问题