MD5哈希函数的二进制格式

3
我正在尝试使用md5算法计算文件摘要。我被要求将输出格式化为二进制而不是十六进制。所以这是我的终端命令(我使用的是Mac):
openssl dgst -md5 -binary ~/Documents/msg_Joudi.txt > ~/Documents/hash.txt
这会生成hash.txt文件,但其内容不是二进制格式,我不知道问题出在哪里。

@user233531,您创建二进制MD5的方式是正确的。输出看起来也很好。您为什么认为文件不是二进制的呢?此外,这不是与编程相关的问题。 - undefined
二进制应该是由0和1组成的,对吗?抱歉,我经常在许多主题中看到这样的问题。 - undefined
@NikolaiRuhe你为什么认为这不是一个与编程相关的问题?他正在尝试以编程方式计算一个算法并格式化输出。你会将这个问题分类到哪个论坛下? - undefined
我刚才在网上看到了一些东西。我认为二进制文件不能在没有十六进制编辑器的情况下读取,这是对的吗? - undefined
@femmestem OP使用命令行从文件内容创建MD5。这种类型的问题更适合在(superuser)[http://superuser.com]上提问。 - undefined
显示剩余4条评论
2个回答

6
创建文件msgFile.txt的MD5哈希值:> 转换为二进制并保存:
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 -b > hash.bin.hex.txt

0

楼主说他想要二进制,然后又说“二进制应该是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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接