Base58 and Base58Check implementation compatible with what is used by the bitcoin network.

keis, updated 🕥 2022-12-11 10:27:03


PyPI Version PyPI Downloads Build Status Coverage Status

Base58 and Base58Check implementation compatible with what is used by the bitcoin network. Any other alternative alphabet (like the XRP one) can be used.

Starting from version 2.0.0 python2 is no longer supported the 1.x series will remain supported but no new features will be added.

Command line usage

$ printf "hello world" | base58

$ printf "hello world" | base58 -c

$ printf "3vQB7B6MrGQZaxCuFg4oh" | base58 -dc
hello world

$ printf "4vQB7B6MrGQZaxCuFg4oh" | base58 -dc
Invalid checksum

Module usage

>>> import base58
>>> base58.b58encode(b'hello world')
>>> base58.b58decode(b'StV1DL6CwTryKyV')
b'hello world'
>>> base58.b58encode_check(b'hello world')
>>> base58.b58decode_check(b'3vQB7B6MrGQZaxCuFg4oh')
b'hello world'
>>> base58.b58decode_check(b'4vQB7B6MrGQZaxCuFg4oh')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "", line 89, in b58decode_check
    raise ValueError("Invalid checksum")
ValueError: Invalid checksum
# Use another alphabet. Here, using the built-in XRP/Ripple alphabet.
# RIPPLE_ALPHABET is provided as an option for compatibility with existing code
# It is recommended to use XRP_ALPHABET instead
>>> base58.b58encode(b'hello world', alphabet=base58.XRP_ALPHABET)
>>> base58.b58decode(b'StVrDLaUATiyKyV', alphabet=base58.XRP_ALPHABET)
b'hello world'


Draft: Better performance for larger inputs

opened on 2022-11-30 04:05:59 by malvidin

Performance for ~30 bytes and larger inputs should be faster. It is much faster for 256 bytes, and should be able to handle inputs in the MB range.

Allow registration to the codecs module

opened on 2017-03-23 16:03:23 by EvaSDK

It would be nice to allow this module to register its functions to the codecs module for easier integration.

David Keijser
GitHub Repository

python base58 bitcoin encoding