Class Base58

java.lang.Object
com.knowm.xchange.serum.core.Base58

public class Base58 extends Object
This code was taken from: https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/core/Base58.java

Base58 is a way to encode Bitcoin addresses (or arbitrary data) as alphanumeric strings.

Note that this is not the same base58 as used by Flickr, which you may find referenced around the Internet.

You may want to consider working with

invalid @link
PrefixedChecksummedBytes
instead, which adds support for testing the prefix and suffix bytes commonly found in addresses.

Satoshi explains: why base-58 instead of standard base-64 encoding?

  • Don't want 0OIl characters that look the same in some fonts and could be used to create visually identical looking account numbers.
  • A string with non-alphanumeric characters is not as easily accepted as an account number.
  • E-mail usually won't line-break if there's no punctuation to break at.
  • Doubleclicking selects the whole number as one word if it's all alphanumeric.

However, note that the encoding/decoding runs in O(n²) time, so it is not useful for large data.

The basic idea of the encoding is to treat the data bytes as a large number represented using base-256 digits, convert the number to be represented using base-58 digits, preserve the exact number of leading zeros (which are otherwise lost during the mathematical operations on the numbers), and finally represent the resulting base-58 digits as alphanumeric ASCII characters.

  • Field Details

    • ALPHABET

      public static final char[] ALPHABET
  • Constructor Details

    • Base58

      public Base58()
  • Method Details

    • encode

      public static String encode(byte[] input)
      Encodes the given bytes as a base58 string (no checksum is appended).
      Parameters:
      input - the bytes to encode
      Returns:
      the base58-encoded string