二进制格式的md5哈希函数

问题描述 投票:0回答:2

我正在尝试使用 md5 算法计算文件的摘要。我被要求将输出格式化为二进制而不是十六进制。这是我在终端中的命令(我使用 mac):

openssl dgst -md5 -binary ~/Documents/msg_Joudi.txt > ~/Documents/hash.txt

生成了hash.txt文件,但其内容不是二进制格式,我不知道错误在哪里。

macos terminal md5
2个回答
6
投票

创建文件的 MD5 哈希值:msgFile.txt

>
转换为 Binary 并保存:

cat msgFile.txt | openssl dgst -md5 -binary > hash.bin.txt

Base64 格式保存二进制文件:

cat msgFile.txt | openssl dgst -md5 -binary | base64 > hash.bin.b64.txt

十六进制表示形式保存二进制:

cat msgFile.txt | openssl dgst -md5 -binary | xxd -ps -c16 > hash.bin.hex.txt

使用Python将二进制转换为整数:

python -c "print(int('$(cat msgFile.txt | openssl dgst -md5 -binary | xxd -ps -c16)', 16))" > hash.bin.int.txt

0
投票

OP 说他想要二进制,然后说“二进制应该是 0 和 1,对吗?”。 虽然,可能不太可能,但如果他真的想要二进制数输出,请这样做:

$ echo -e "xx\nyy" >in.txt
$ perl -ln0777e 'use Digest::MD5 "md5"; print "0b".unpack("B*",md5($_))' <in.txt
0b001111000101011000010000100101100011010101000101111000101000000011110110011010110011010000!

以上含义:

  • 将整个文件放入 $_ 中,计算 $_ 上的 md5 摘要以创建二进制数据
  • 使用unpack将二进制数据转换为二进制数字串

如果他确实想要二进制数据,修改上面:

$ perl -ln0777e 'use Digest::MD5 "md5"; print md5 $_' <in.txt >binout.txt
© www.soinside.com 2019 - 2024. All rights reserved.