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)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

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

コメントを残す

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

CAPTCHA


Ethereum(イーサリアム)
Ethereumの開発用ツールリストが公開されていた!

ALISのCTO石井さんがつぶやいてたんですが とてもありがたい #Ethereum 開発ツールの一 …

技術メモ
Counterpartyの環境構築が大変という話

暗号通貨の独自通貨を作ろうとするとEthereumが有名で簡単ですが、BitcoinでもCounte …

Ethereum(イーサリアム)
Error: The contract code couldn’t be stored, please check your gas amount.

ALISのICOソースのzeppelinバージョンを1.2から1.8にあげようとしたときにはまったエ …