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

ruby sha 256 hexidigest值与python生成的值不同,python,ruby,hash,sha256,hashlib,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 我

我在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 3.5.0: Ruby 2.2.3
需要“摘要”
摘要::SHA256.hexdigest(“xyz”)
#=>“3608BCAE44EA6C4D268EB6DB02260269892C0B42B86BBF1E77A6FA16C3C9282”
或
H=摘要::SHA256.new
# => #
H#
赫克斯文摘
#=>“3608BCAE44EA6C4D268EB6DB02260269892C0B42B86BBF1E77A6FA16C3C9282”
(我认为)问题在于:

hasher=Digest::SHA256.Digest(“xyz”)
#=>“6\b\xBC\xA1\xE4N\xA6\xC4\xD2h\xEBm\xB0\”`&\x98\x92\xC0\xB4+\x86\xBB\xF1\xE7zo\xA1l您想要的ruby代码就是

require 'digest'
hash   = Digest::SHA256.hexdigest("xyz")
hexdigest
将要摘要的字符串作为参数,因此您以前的代码所做的是对字符串进行摘要处理(以32字节的原始数组返回),然后计算其中的SHA256,并将其格式化为64个十六进制字符

ruby digest库也有一个类似于python示例的api:

hash = Digest::SHA256.new
hash.update 'xyz'
hash.hexdigest
当您要增量计算散列时

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"`
require 'digest'
hash   = Digest::SHA256.hexdigest("xyz")
hash = Digest::SHA256.new
hash.update 'xyz'
hash.hexdigest