2011-12-21 3 views
0

Мне нужен алгоритм хэширования при использовании Ruby. В моей ситуации я сравниваю содержимое файла. Я использовал MD5, но он также проверяет имя файла (или, похоже, все равно). Есть ли алгоритм, который я могу легко реализовать, или мне нужно написать его с нуля?Алгоритм Ruby Hash

ответ

2

Использование FileUtils.compare_file.

require 'fileutils' 
FileUtils.compare_file('somefile', 'somefile') #=> true 
+1

Глядя на реализацию этого, он сравнивает два потока файлов с блоком мудрый и останавливается, как только блоки не совпадают. Интересный метод не знал об этом раньше. –

2

Я не уверен, почему вы думаете, что сравнивает имя файла?

require "digest" 
Digest::MD5.hexdigest(File.read('file1')) 
=> "60b725f10c9c85c70d97880dfe8191b3" 
Digest::MD5.hexdigest(File.read('file2')) 
=> "60b725f10c9c85c70d97880dfe8191b3" 

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

+0

Действительно? Я использовал FileUtils.cp, и он дал мне разные суммы. Для меня это тоже не имеет смысла. – avatarmonkeykirby

+0

@avatarmonkeykirby Как вы относитесь к cp? 'compare_file' возвращает true и в этих файлах. Возможно, файлы, о которых идет речь, _are_ different (whitespace и т. Д.) – Slartibartfast

+0

@avatarmonkeykirby: вы должны вставить этот код в вопрос. – tokland