【问题标题】:Ruby Hash AlgorithmRuby 哈希算法
【发布时间】:2011-12-21 17:18:42
【问题描述】:

我在使用 Ruby 时需要一个哈希算法。 在我的情况下,我正在比较文件的内容。我使用的是 MD5,但它也会检查文件名(或者似乎无论如何)。有没有一种我可以轻松实现的算法,或者我必须从头开始编写一个算法?

【问题讨论】:

    标签: ruby hash md5


    【解决方案1】:

    使用FileUtils.compare_file

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

    【讨论】:

    • 看看这个的实现,它会逐块比较两个文件流,一旦块不匹配就停止。有趣的方法,以前不知道。
    【解决方案2】:

    我不确定你为什么认为它会比较文件名?

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

    你做了什么来得到不同的校验和?

    【讨论】:

    • 真的吗?我使用了 FileUtils.cp,它给了我不同的金额。这对我来说也真的没有意义。
    • @avatarmonkeykirby cp 是什么意思? compare_file 在这些文件上也返回 true。也许有问题的文件 不同(空格等...)
    • @avatarmonkeykirby:您应该将该代码粘贴到问题中。
    • 我使用 FileUtils.cp 复制文件,然后将总和与 MD5 进行比较。这可能是我电脑的问题。
    【解决方案3】:

    这类似于上面的答案,但使用 SHA256,因为如果我没记错的话,MD5 被彩虹表破坏了

    require 'digest'
    
    puts "Hello!"
    puts Digest::SHA256.hexdigest 'message'
    puts Digest::SHA256.hexdigest 'message2'
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2014-03-03
      • 2012-06-03
      • 1970-01-01
      • 2021-05-03
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多