奇怪的哈希输出



我正在尝试使用这个脚本为目录中的文件创建一个散列:

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

最新更新