python - ruby sha256 hexdigest 值与 python 生成的值不同

标签 python ruby 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

输出:3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282

我尝试过使用 Ruby,

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

输出:“18cefdae0f25ad7bb5f3934634513e54e5ac56d9891eb13ce456d3eb1f3e72e8”

任何人都可以帮助我理解为什么会有差异吗?我怎样才能得到与 python 相同的值?

最佳答案

你要的ruby代码就是

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

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

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

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

当你想增量计算哈希值时

关于python - ruby sha256 hexdigest 值与 python 生成的值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768598/

相关文章:

ios - OC,任何实例对象的哈希值都会在初始化后发生变化?

c# - HMACSHA256 在计算哈希时忽略零

python - 来自连接的 SQLAlchemy 声明属性(单个属性,而不是整个对象)

python - 如何在 Python 中显示 AxesSubplot?

python - 无法在 Python 中导入 ftputil

ruby-on-rails - 移除 Rails 3.1 中的事件记录错误

ruby - 无法将控制台输出保存为 Ruby 变量

sql - Rails - 当用户来到我的页面时如何仅第一次运行方法

c++ - 哈希的 unordered_map

python - 如何检查操作系统是否是 Debian 衍生版本 (Python)