我在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

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

有帮助吗?

解决方案

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

我一点都不了解Ruby,但我通常希望打开文件,并反复阅读 二进制 从中,使用它更新哈希。不要做任何谈论“线”或根本使用文本的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top