Class Base58

java.lang.Object
org.apache.commons.codec.binary.BaseNCodec
org.apache.commons.codec.binary.Base58
All Implemented Interfaces:
BinaryDecoder, BinaryEncoder, Decoder, Encoder

public class Base58 extends BaseNCodec
Provides Base58 encoding and decoding as commonly used in cryptocurrency and blockchain applications.

Base58 is a binary-to-text encoding scheme that uses a 58-character alphabet to encode data. It avoids characters that can be confused (0/O, I/l, +/) and is commonly used in Bitcoin and other blockchain systems.

Encoding and decoding produce results when EOF is signaled.

Decoding rejects input longer than a configurable maximum (DEFAULT_MAX_DECODE_LENGTH encoded bytes by default, see Base58.Builder.setMaxDecodeLength(int)). Encoding rejects binary input longer than DEFAULT_MAX_ENCODE_LENGTH bytes by default; configure it with Base58.Builder.setMaxEncodeLength(int). These limits apply to the total input across all chunks in an operation. Memory usage is proportional to the accumulated input and conversion output. Encoded output can exceed the decode limit; configure both limits appropriately for larger trusted values.

This class is thread-safe for read operations but the Context object used during encoding/decoding should not be shared between threads.

The Base58 alphabet is:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

This excludes: 0, I, O, and l.

Since:
1.22.0
See Also:
  • Field Details

  • Constructor Details

    • Base58

      public Base58()
      Constructs a Base58 codec used for encoding and decoding.
    • Base58

      public Base58(Base58.Builder builder)
      Constructs a Base58 codec used for encoding and decoding with custom configuration.
      Parameters:
      builder - The builder with custom configuration.
  • Method Details

    • builder

      public static Base58.Builder builder()
      Creates a new Builder.

      To configure a new instance, use a Base58.Builder. For example:

      Base58 base58 = Base58.builder()
        .setMaxEncodeLength(4096)
        .get()
      
      Returns:
      A new Builder.
    • getEncodedLength

      public long getEncodedLength(byte[] array)
      Gets the number of Base58 characters needed to encode the supplied array.

      The length depends on the input bytes, including leading zeros. This method observes the configured maximum encode length.

      Overrides:
      getEncodedLength in class BaseNCodec
      Parameters:
      array - The binary input to encode.
      Returns:
      The number of Base58 characters that encoding the array produces.
      Throws:
      IllegalArgumentException - Thrown if the input exceeds the configured maximum encode length.
      Since:
      1.23.0
    • isInAlphabet

      protected boolean isInAlphabet(byte value)
      Tests whether the octet is in the Base58 alphabet.
      Specified by:
      isInAlphabet in class BaseNCodec
      Parameters:
      value - The value to test.
      Returns:
      true if the value is defined in the Base58 alphabet false otherwise.