In [1]:
import hashlib

まずはsha256ハッシュ関数について見ていきます。

In [2]:
s = hashlib.sha256()

update()でbyte列を読み込みます。
pythonではb'文字列'を使うか、後述するencode()を使います。

In [3]:
s.update(b"mrsekut")

以下が変換されたハッシュの値です。

In [4]:
s.hexdigest()
Out[4]:
'eefad9e75f8617d7822ce17e586c0fe12f1f2f353df11042e5bb57966d63f226'

digest_sizeで生成されたハッシュのバイト数を返します。

In [5]:
s.digest_size
Out[5]:
32

encode()を用いてもutf-8にエンコードすることができます。

In [6]:
s2 = hashlib.sha256()
s2.update("mrsekut".encode('utf-8'))
s2.hexdigest()
Out[6]:
'eefad9e75f8617d7822ce17e586c0fe12f1f2f353df11042e5bb57966d63f226'

先ほどと全く同じハッシュ値が返されました。

次に、文字列を一文字だけ変えてみましょう。

In [7]:
hashlib.sha256(b"mrsekuy").hexdigest()
Out[7]:
'3a8211239a6efa8ce60c8af2dae56d33ab71770c4d0a6fcc15ae652dedda6da0'

このように一文字変えだけでハッシュ値が全くの別物になったことがわかります。

次にRIPEMD160も同じように見てみます。

In [8]:
r = hashlib.new("ripemd160")
r.update(b"mrsekut")
w = r.hexdigest()
print(w)
ca19ffe8d4aedc10d9003e0eb53541bc63826f36
In [9]:
r.digest_size
Out[9]:
20

少し短いハッシュ値が返されたのがわかります。

やらなくてもわかりますが、ダブルハッシュもやってみます。
ripemd160→sha256の順番にハッシュにします。

In [10]:
hashlib.sha256(w.encode('utf-8')).hexdigest()
Out[10]:
'362909c65b850c7e54b05296e28a68db2945d231028c690145040915378fe642'