pythonでhash関数を試してみる

技術メモ

bitcoinのhash関数を理解するために、pythonを使って実際にhash関数を試すことにした

環境

dockerのubuntu16イメージ上で試した。

pybitcointools

pybitcointoolsを使う。bitcoinも入れとく。

# pip install bitcoin
Collecting bitcoin
  Downloading bitcoin-1.1.42.tar.gz
Building wheels for collected packages: bitcoin
  Running setup.py bdist_wheel for bitcoin ... done
  Stored in directory: /root/.cache/pip/wheels/15/d9/46/0029939110ce681cbcb1b94b8952f475eb3562e65cd99d311f
Successfully built bitcoin
Installing collected packages: bitcoin
Successfully installed bitcoin-1.1.42
# pip install pybitcointools
Collecting pybitcointools
  Downloading pybitcointools-1.1.15.tar.gz
Building wheels for collected packages: pybitcointools
  Running setup.py bdist_wheel for pybitcointools ... done
  Stored in directory: /root/.cache/pip/wheels/22/5f/48/7410a0e03801249fcc708771586cd5970d1105fa0d9d67d3d6
Successfully built pybitcointools
Installing collected packages: pybitcointools
Successfully installed pybitcointools-1.1.15

おわり。pip楽だ

ハッシュ関数各種

各種関数試してみる。

sha1(D)

hashlib使う。pybitcointoolsにメソッドなさそう

# python
>>> import hashlib
>>> keywords = 'todoroki'
>>> hashlib.sha1(keywords).hexdigest()
'f91957f0443eb516005dcf7f26c8561867241835'

sha256(D)

# pybtctool sha256 todoroki
05e6fb518c9a606fe0f1c6e53ae2e12f7f33078236cefc89ae0f08bc2dba8ae1

sha512(D)

hashlib使う。pybitcointoolsにメソッドなさそう

>>> import hashlib
>>> keywords = 'todoroki'
>>> hashlib.sha512(keywords).hexdigest()
'e2f836f5f9a2e816fbc4326b057dea7de50296add9a4958e5d80d4e953d7dcd603c171e76da8f5aad25ad4b5940c8caf7373e6968b8107cd3ee521dfb2da04a2'

sha256(sha256(D))

# pybtctool sha256 todoroki | pybtctool -s sha256
78c38766b635d0b33c751e416c6976d5f80c552c96062cd567bc577d28b95dd8

とおもったけど、上記ではダメなようで16進数の文字列でパイプで渡してしまうのでhash値が異なってしまう。
このため 最初はdigestでバイト列で引数渡す。

>>> hashlib.sha256(hashlib.sha256(keywords).digest()).hexdigest()
'79998e51dd9604f307664c03c78a073597c020ba91b53e3ff2405355d9a6a5db'

ripemd160

# pybtctool ripemd160(D) todoroki
f7262bb5d43e23af1abcbe6aa30c4ba8eaa9dd48

ripemd160(sha256(D))

# pybtctool sha256 todoroki | pybtctool -s ripemd160
c963e2ec847f6c279bc2c7c1322e4300074a68c5

こちらもhashlibでやりなおし。
ripemd160はhashlibでコマンドがないようなので、new して使う

>>> hashlib.new('ripemd160', hashlib.sha256(keywords).digest()).hexdigest()
'7909282ee1ecd21ecebd352acec2f6bf794429ce'

簡単にhash値求められる♪

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならコインチェックがおすすめです。

※アプリは指値売買ができず手数料が高いので、アプリをダウンロードするのではなくメール&パスワード登録へ!まずは5万円ほど入金して仮想通貨とブロックチェーンの世界を楽しんでください!

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


miningpoolhub
miningpoolhubのAPIを使って自動スイッチングを試してみる in ethOS

* アイキャッチの男性は、Flicker上のライセンスフリーの画像ひっぱってきているだけで、本文とま …

NEM
[memo] NEMを送金しようとするとFAILURE_TIMESTAMP_TOO_FAR_IN_FUTUREが出る

Docker上のコンテナで、NEM-libraryを使ってmosaicの送金を試していたところ FA …

NEM
NEMのテストネットワークで独自通貨を試す

NEMアプリケーションを作る際にテストネットワークでのテスト非常に重要になってきます。 このため今回 …