【问题标题】:Ruby: How can I write a digest to a file in binary formatRuby:如何以二进制格式将摘要写入文件
【发布时间】:2015-05-03 10:33:54
【问题描述】:

我需要将 Digest::SHA512 对象存储到 二进制 格式的文件中。
这似乎微不足道,但无论我尝试将其写为十六进制字符串。
我期待以下代码可以工作:

bindigest=digest.update(chall)
File.open('sha1.bin', 'wb') {|file| file.write(bindigest) }

但它不会:它会转换为纯文本。
一个类似的问题似乎没有答案: Can I serialize a ruby Digest::SHA1 instance object?

使用解包工具需要将 bigint 转换为二进制字符串,这又不是小事... 有什么建议吗?

提前谢谢你!

【问题讨论】:

    标签: ruby binary-data digest bigint


    【解决方案1】:

    Digestto_s method 返回哈希的十六进制编码,因此这是您在尝试输出时默认得到的(因为 Ruby 在写入时将使用 to_s)。要获取原始二进制文件,请使用 digest:

    digest = Digest::SHA512.new
    digest.update(chall)
    File.open('sha1.bin', 'wb') { |file| file.write(digest.digest) }
    

    如果您不计算块中的哈希值,您也可以使用class method version of digest

    digest = Digest::SHA512.digest(chall)
    File.open('sha1.bin', 'wb') { |file| file.write(digest) }
    

    【讨论】:

    • 工作完美,让你马特!
    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多