pythonでBase58Checkを試してみる

技術メモ

今日はBase58Checkを試してみる。

技術者向けビットコイン講座 第2回 ビットコインアドレスと秘密鍵のフォーマット

に詳しい説明がのってる

# pip install base58
Collecting base58
  Downloading base58-0.2.5-py2-none-any.whl
Installing collected packages: base58
Successfully installed base58-0.2.5
# python
>>> import base58
>>> base58.b58encode("example data")
'2v4VTbT14Bb7tVU4Q'

でbase58を使えるようにしておく。
その後、Base58Checkを出してみると。

base58.b58encode_check("todoroki")
'3CSVA6ULBx3hA5gMW'

簡単にできてしまう。
これだと面白くないので実際にどのような実装になっているかみていく。

def b58encode_check(v):
    '''Encode a string using Base58 with a 4 character checksum'''

    digest = sha256(sha256(v).digest()).digest()
    return b58encode(v + digest[:4])

与えられた文字列と、sha256sha256のバイト先頭から4バイトくっつけたものをb58エンコードしている。

デコードも確認する。base58.pyのソースで確認
https://github.com/keis/base58/blob/master/base58.py#L100

def b58decode_check(v):
    '''Decode and verify the checksum of a Base58 encoded string'''

    result = b58decode(v)
    result, check = result[:-4], result[-4:]
    digest = sha256(sha256(result).digest()).digest()

    if check != digest[:4]:
        raise ValueError("Invalid checksum")

    return result

ライブラリ使うとこういったのは本当に楽。

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

コメントを残す

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

CAPTCHA


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

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

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

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

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

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