Ruby и SHA256 - разница между MacOS и Windows? - PullRequest
0 голосов
/ 15 ноября 2010

Я написал этот маленький тестовый скрипт на 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

Может кто-нибудь сказать мне, в чем здесь проблема?

1 Ответ

2 голосов
/ 15 ноября 2010

Вы открываете JPEG (т.е. двоичный файл) и затем читаете каждую строку текста из него.Не делай этого.Каждый раз, когда вы рассматриваете двоичные данные как текст, вы просто запрашиваете странное поведение.

Я совсем не знаю о Ruby, но обычно я ожидаю открыть файл и многократно читать фрагменты двоичных данных из него, обновляя хеш с этим.Не делайте ничего, что говорит о «строках» или вообще использует текст.

...