ブロックチェーンの理解のために
ブロックチェーンを勉強している際にアドレスという各自が暗号通貨を管理するための口座番号が出てきました。
アドレスの作成のためにハッシュ関数とハッシュ値を使っていることを知りました。
ハッシュ値の主な特徴として3つ挙げられます。
- 関数を通したあとのデータからは、もとのデータが何か分からない。
- どんなデータをハッシュ化しても、同じ長さのハッシュ値になる。
- 同じデータを何度ハッシュ化しても、常に同じハッシュ値になる。
ハッシュ値の上記の3つの特徴がブロックチェーンの改ざんが大変になる要因となっているようです。
詳しくはまた記事で紹介できたらと思います。
まずはPythonでハッシュ値の特徴が正しいのか確かめてみましょう。
実行環境
Google Colaboratoryを使用しました。
ライブラリ
hashlibというPythonのライブラリを使います。
コード
# -*- coding: utf-8 -*-
import hashlib
message = "りんご"
#ハッシュ値を求めた結果
a = hashlib.sha256(message.encode("utf-8")).hexdigest()
print(a)
len(a)
#出力結果
4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9
64
りんごが4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9というハッシュ値に変わりました。
関数を通したあとのデータからは、もとのデータが何か分からない。
という特徴があることが分かります。
message2 ="りんごごりら"
#ハッシュ値を求めた結果
b = hashlib.sha256(message2.encode("utf-8")).hexdigest()
print(b)
len(b)
#出力結果
1cfe0892e70062529d32f8ee430871684235bcc0d29f0a0329ebc3d1e02d8aa5
64
ハッシュ値の長さは64文字です。
どんなデータをハッシュ化しても、同じ長さのハッシュ値になる。
という性質があることが分かりました。
message3 ="りんご"
#ハッシュ値を求めた結果
c = hashlib.sha256(message3.encode("utf-8")).hexdigest()
print(c)
len(c)
a == c
#出力結果
4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9
64
True
りんごをハッシュ化した場合同じハッシュ値になりました。
同じデータを何度ハッシュ化しても、常に同じハッシュ値になる。
という性質を満たすことが分かりました。