将哈希字符串转换为二进制文件

Convert hash string to binary file

sha512sum 等实用程序生成的文本转换为二进制文件的最简单方法是什么?

我想将像 77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec 这样的十六进制字符串(sha512sum 生成的示例)转换为二进制文件(64 字节长),其中每个字节的值相当于一对来自字符串的 letters/digits。我正在寻找一种需要最少工具的解决方案,所以如果可以使用 bashsed 或 coreutils 的一些实用程序轻松完成,我会很高兴。我宁愿避免使用 xxd,因为这似乎无法处理此类字符串(我必须添加 "addresses" 和一些空格)。

我需要将哈希作为二进制文件,将其转换为目标文件,然后 link 与我正在编写的应用程序一起使用。如果有另一种方法可以将这样的字符串(以二进制形式!)嵌入到应用程序中(通过数组或其他方式) - 这对我来说也是一个解决方案。

一点 sedecho 可能会:

for i in $(echo 77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec | sed 's/../& /g'); do
   echo -ne "\x$i"
done > output.bin

sed 命令将十六进制字符串拆分为字节,echo 将其显示为十六进制字符。

或以 sha512sum 输出的较短形式,如评论中所建议:

echo -ne "$(sha512sum some-file.txt | sed 's/ .*$//; s/../\x&/g')"

如果你有节点:

node -e "var fs = require('fs'); fs.writeFileSync('binary', new Buffer('77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec', 'hex'))"

perl 怎么样:

<<<77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec \
perl -e 'print pack "H*", <STDIN>' > hash.bin

如果您的系统中有 openssl 并且想要一个二进制形式的 sha512 散列,您可以使用这个:

openssl dgst -sha512 -binary somefile.txt
s="77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec"; 
echo -n $s | xxd -r -p > file.bin

 1 File(s)             64 bytes

测试于 Ubuntu 16.04.7