1. ホーム
  2. python

[解決済み] ruby sha 256 hexidigest 値は python が生成するものと異なる。

2022-02-09 12:57:23

質問

PythonのhashlibライブラリとrubyのDigest::SHA256.hexdigestライブラリを使っています。

pythonで、私は試してみました。

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

output : 3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282

Rubyで、やってみました。

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

output : "18cefdae0f25ad7bb5f3934634513e54e5ac56d9891eb13ce456d3eb1f3e72e8"

なぜこのような違いがあるのか、どなたか教えていただけませんか?どうすればパイソンと同じ値を得ることができますか?

どのように解決するのですか?

必要なルビーコードは

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

hexdigest はダイジェストする文字列を引数に取るので、 前のコードでは文字列をダイジェストして (32バイトの生の配列として返す)、 その & の SHA256 を計算していました (フォーマットは 64 ヘキサ文字です)。

RubyのDigestライブラリは、Pythonの例と同じようなAPIを持っています。

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

ハッシュをインクリメンタルに計算したい場合