奇怪的哈希输出

Weird hash output

我正在尝试使用此脚本为目录中的文件创建哈希:

for file in *.zip; do openssl dgst -sha256 -binary ${file%.*}.zip $file | base64 >> ${file%.*}.zip.base64sha256; done

它创建这样的散列:

b5iQL1fo5r+6osykGr0mcEZ14Xdbn8y0SrFGIuzMfeRvmJAvV+jmv7qh7OUavSZwRnXhd1ufzLRKsUYi7Mx95A==

但是对于 terraform 和 AWS Lambdas,我需要一个短哈希值。我可以通过使用终端和这样的命令来获得:

openssl dgst -sha256 -binary archive.zip | base64 >> hash.base64sha256

输出为b5iQL1fo5r+6osykGr0mcEZ14Xdbn8y0SrFGIuzMfeQ=

所以问题是:如何检索短版散列? Terraform 和 AWS 需要它(当哈希值很长时 - lambda 每次都会重新部署)

而不是 for file in *.zip; do openssl dgst -sha256 -binary ${file%.*}.zip $file | base64 >> ${file%.*}.zip.base64sha256; done

尝试

for file in *.zip; do openssl dgst -sha256 -binary ${file%.*}.zip | base64 >> ${file%.*}.zip.base64sha256; done

如果您解码“长”base64,您会发现它是重复的相同字节序列。那是因为这里

openssl dgst -sha256 -binary ${file%.*}.zip $file

您指定了文件两次,一次是删除扩展名,然后 re-adding 它是 ${file%.*}.zip 中的 .zip,另一次是 $file。这导致输出两个输入(相同)的串联哈希。要解决此问题,只需指定一次:

openssl dgst -sha256 -binary "$file"

(带引号以避免 shell 扩展中的空格问题)