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
コメントはまだありません

コメントを残す

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

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …