我试图获取存储在从curl语句创建的变量中的内容的哈希,而不将curl输出到文件中。
基本上我试图避免:
curl website.com/file.exe >> tempfile.bin
md5sum tempfile.bin
以上提供了正确的md5哈希。在测试纯文本文件时,我的方法(下面)似乎有效,但是当我尝试下载二进制文件并将其保存到变量时,哈希与我将其保存到文件时不同。
我的尝试:
binary=$(curl website.com/file.exe)
echo $binary | md5sum
我想我可能会错过一面旗帜,或者回音可能不是最好的方式。这个挑战的重要部分不是将文件写入磁盘,而是实现与写入磁盘相同的md5哈希。
答案 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"