我正在尝试使用这个脚本为目录中的文件创建一个散列:
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每次都要重新部署)
如果你解码"Base64你会看到它是相同的重复字节序列。这是因为这里
openssl dgst -sha256 -binary ${file%.*}.zip $file
您指定了该文件两次,一次删除扩展名,然后将其重新添加为${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
试
for file in *.zip; do openssl dgst -sha256 -binary ${file%.*}.zip | base64 >> ${file%.*}.zip.base64sha256; done