bash - 在不创建文件的情况下散列变量的二进制内容

bash - hash binary contents of variable without creating a file

我正在尝试获取存储在从 curl 语句创建的变量中的内容的哈希值,而不将 curl 输出到文件中。

基本上我在努力避免:

curl website.com/file.exe >> tempfile.bin
md5sum tempfile.bin

以上提供了正确的 md5 散列。我的方法(如下)在测试纯文本文件时似乎有效,但是当我尝试下载二进制文件并将其保存到变量时,哈希值与我将其保存到文件时不同。

我的尝试:

binary=$(curl website.com/file.exe)
echo $binary | md5sum

我想我可能缺少一个标志,或者 echo 可能不是最好的方法。这个挑战的重要部分不是将文件写入磁盘,而是获得与写入磁盘相同的 md5 哈希值。

要同时跳过使用临时变量的步骤,您可以使用进程替换:

md5sum <(curl website.com/file.exe)

或直接通过管道传送到 md5sum

curl website.com/file.exe | md5sum

bash shell 不能很好地处理原始二进制数据,如您所见。为了实现您的目标,您需要在将文件内容读入 bash 变量时将其编码为文本格式,并在将它们写出时对其进行解码。

例如,如果您有 base64 工具,您可以使用它来重新实现您的示例,如下所示:

encoded=$(curl website.com/file.exe | base64)
echo "$encoded" | base64 --decode | md5sum

如果您稍后想将数据保存到名为 $output 的文件中,您可以这样做:

echo "$encoded" | base64 --decode -o "$output"