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

时间:2016-01-30 20:54:43

标签: linux bash curl hash md5sum

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

基本上我试图避免:

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

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

我的尝试:

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

我想我可能会错过一面旗帜,或者回音可能不是最好的方式。这个挑战的重要部分不是将文件写入磁盘,而是实现与写入磁盘相同的md5哈希。

2 个答案:

答案 0 :(得分:3)

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

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

或直接传递给md5sum

curl website.com/file.exe | md5sum

答案 1 :(得分:1)

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

例如,如果你有base64工具,你可以使用它来重新实现你的例子:

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

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

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