2010-11-15 5 views
0

j'ai écrit ce petit script de test en Ruby (sur Mac OS):Ruby et SHA256 - Différence entre MacOS et Windows?

#!/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' 

qui délivre en sortie (sur MacOS):

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

Puis je lance le même script exacte dans Windows XP:

Quelqu'un peut-il me dire quel est le problème ici?
F:\shatest>ruby sha.rb 
9c787b71392551238b24915c888dbd44f4ff465c8e8aadca7af3bb6aaf66a3ca 
40075d8441ab6a9abeceb7039552704320f471667b8f9ac3c18b9b5b0a1fee7e 
false 

Répondre

2

Vous ouvrez un JPEG (à savoir un fichier binaire), puis lire chaque ligne de texte de celui-ci. Ne fais pas ça. Chaque fois que vous traitez des données binaires sous forme de texte, vous demandez simplement un comportement étrange. Je ne connais pas du tout Ruby, mais je m'attendrais généralement à ouvrir le fichier, et à lire à plusieurs reprises des blocs de données binaires, en mettant à jour le hachage avec cela. Ne faites rien qui parle de "lignes" ou qui utilise du texte.

+0

thx! cela a résolu le problème. – DiegoFrings

+1

J'utilise maintenant: Digest :: SHA256.file ('dont-panic.jpeg'). Hexdigest ... ressemble à une bien meilleure méthode pour les fichiers binaires – DiegoFrings

Questions connexes