奇怪的哈希输出
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 扩展中的空格问题)
我正在尝试使用此脚本为目录中的文件创建哈希:
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 扩展中的空格问题)