【问题标题】:md5 hash function in binary format二进制格式的 md5 哈希函数
【发布时间】:2015-12-10 07:47:32
【问题描述】:

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

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

这会生成hash.txt文件,但是它的内容不是二进制格式的,不知道哪里出错了。

【问题讨论】:

  • 这对我来说是正确的。我复制了你的代码,从终端运行$ file -I ~/Desktop/hash.txt 来检查文件类型,它返回:/Desktop/hash.txt: application/octet-stream; charset=binary 你得到了什么而不是二进制文件?
  • 这是文件中的内容:y«I:yÌ˘m.§6ßı6B
  • @user233531 您创建二进制 md5 的方式是正确的。输出看起来也不错。为什么您认为该文件不是二进制文件?而且,此外,这不是一个与编程相关的问题。
  • 二进制应该是0和1吧?抱歉,我经常看到许多主题的问题
  • @NikolaiRuhe 为什么你认为这不是一个与编程相关的问题?他正在尝试以编程方式计算算法并格式化输出。您会将其归类到哪个论坛?

标签: macos terminal md5


【解决方案1】:

创建文件的MD5哈希:msgFile.txt > 转换为二进制并保存:

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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多