Ruby: 如何将摘要写入二进制格式的文件

Ruby: How can I write a digest to a file in binary format

我需要将 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 转换为二进制字符串,这又不是一件容易的事... 有什么建议吗?

提前致谢!

to_s method of Digest returns the hexadecimal encoding of the hash, so this is what you get by default when trying to output it (since Ruby will use to_s when writing). To get the raw binary, use 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) }