【问题标题】:Ruby and SHA256 - Difference between MacOS and Windows?Ruby 和 SHA256 - MacOS 和 Windows 之间的区别?
【发布时间】:2010-11-15 17:55:21
【问题描述】:

我用 Ruby(在 MacOS 上)编写了这个小测试脚本:

#!/usr/bin/ruby
require 'digest/sha2'

def calc_sha(file)
  # calc hash
  hash = Digest::SHA2.new
  File.open(file, 'r') do |fh|
    fh.each_line do |l|
      hash << l
    end
  end

  hash.to_s
end

puts calc_sha('dont-panic.jpeg')
puts '40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e'
puts calc_sha('dont-panic.jpeg') ==  '40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e'

哪些输出(在 MacOS 上):

~/shatest $ ./sha.rb 
40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e
40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e
true

然后我在 Windows XP 中运行完全相同的脚本:

F:\shatest>ruby sha.rb
9c787b71392551238b24915c888dbd44f4ff465c8e8aadca7af3bb6aaf66a3ca
40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e
false

谁能告诉我这里有什么问题?

【问题讨论】:

    标签: ruby windows macos sha256


    【解决方案1】:

    您正在打开一个 JPEG(即二进制文件),然后从中读取每一行 文本。不要那样做。每当您将二进制数据视为文本时,您只是在要求奇怪的行为。

    我对 Ruby 了解不多,但我通常希望打开文件,并从中反复读取 binary 数据块,并以此更新哈希。不要做任何谈论“线条”或使用文字的事情。

    【讨论】:

    • 我现在正在使用:Digest::SHA256.file('dont-panic.jpeg').hexdigest ... 看起来是一种更好的二进制文件方法
    猜你喜欢
    • 2013-08-05
    • 2011-07-28
    • 2013-05-26
    • 2012-05-21
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多