ruby sha 256 hexdigest 值与 python 生成的值不同

Hou*_*und 3 ruby python hash sha256 hashlib

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

我试过用python,

import hashlib
hasher = hashlib.sha256()
hasher.update("xyz")
hasher.digest()
hash = hasher.hexdigest()
print hash
Run Code Online (Sandbox Code Playgroud)

输出:3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282

我试过用红宝石,

require 'digest'
hasher   = Digest::SHA256.digest "xyz"
hash   = Digest::SHA256.hexdigest(hasher)
Run Code Online (Sandbox Code Playgroud)

输出:“18cefdae0f25ad7bb5f3934634513e54e5ac56d9891eb13ce456d3eb1f3e72e8”

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

Fre*_*ung 7

你想要的 ruby​​ 代码只是

require 'digest'
hash   = Digest::SHA256.hexdigest("xyz")
Run Code Online (Sandbox Code Playgroud)

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

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

hash = Digest::SHA256.new
hash.update 'xyz'
hash.hexdigest
Run Code Online (Sandbox Code Playgroud)

当您想以增量方式计算散列时