【问题标题】:ruby sha 256 hexidigest values are different from what python generatesruby sha256 hexdigest 值与 python 生成的不同
【发布时间】:2016-02-19 12:17:38
【问题描述】:

我在 python 中使用 hashlib 库,在 ruby​​ 中使用 Digest::SHA256.hexdigest 库

我试过用python,

import hashlib
hasher = hashlib.sha256()
hasher.update("xyz")
hasher.digest()
hash = hasher.hexdigest()
print hash

输出:3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282

我试过用 Ruby,

require 'digest'
hasher   = Digest::SHA256.digest "xyz"
hash   = Digest::SHA256.hexdigest(hasher)

输出:“18cefdae0f25ad7bb5f3934634513e54e5ac56d9891eb13ce456d3eb1f3e72e8”

谁能帮我理解为什么会有差异?如何获得与 python 相同的值?

【问题讨论】:

    标签: python ruby hash sha256 hashlib


    【解决方案1】:

    我使用以下代码得到相同的结果:

    Python 3.5.0:

    import hashlib
    >>> hashlib.sha256("xyz".encode()).hexdigest()
    '3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282'
    

    Ruby 2.2.3

    require 'digest'
    
    Digest::SHA256.hexdigest("xyz")
    # => "3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282"
    
    OR
    
    H = Digest::SHA256.new
    # => #<Digest::SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855>
    H << "xyz"
    # => #<Digest::SHA256: 3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282>
    H.hexdigest
    # => "3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282"
    

    问题在于(在我看来):

    hasher = Digest::SHA256.digest("xyz")
    # => "6\b\xBC\xA1\xE4N\xA6\xC4\xD2h\xEBm\xB0\"`&\x98\x92\xC0\xB4+\x86\xBB\xF1\xE7zo\xA1l<\x92\x82"`
    

    这不是"xyz:"。 (免责声明:我过去几乎没有使用过 Ruby)。

    【讨论】:

      【解决方案2】:

      你想要的ruby代码就是

      require 'digest'
      hash   = Digest::SHA256.hexdigest("xyz")
      

      hexdigest 将要消化的字符串作为参数,因此您之前的代码所做的是消化字符串(返回为 32 字节的原始数组),然后计算该字符串的 SHA256,并将其格式化为 64 个十六进制字符。

      ruby 摘要库也有一个类似于你的python示例的api:

      hash = Digest::SHA256.new
      hash.update 'xyz'
      hash.hexdigest
      

      当您想要增量计算哈希时

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-16
        相关资源
        最近更新 更多