View Source Base (Elixir v1.13.0-rc.0)

This module provides data encoding and decoding functions according to RFC 4648.

This document defines the commonly used base 16, base 32, and base 64 encoding schemes.

base-16-alphabet

Base 16 alphabet

ValueEncodingValueEncodingValueEncodingValueEncoding
00448812C
11559913D
226610A14E
337711B15F

base-32-alphabet

Base 32 alphabet

ValueEncodingValueEncodingValueEncodingValueEncoding
0A9J18S273
1B10K19T284
2C11L20U295
3D12M21V306
4E13N22W317
5F14O23X
6G15P24Y(pad)=
7H16Q25Z
8I17R262

base-32-extended-hex-alphabet

Base 32 (extended hex) alphabet

ValueEncodingValueEncodingValueEncodingValueEncoding
009918I27R
1110A19J28S
2211B20K29T
3312C21L30U
4413D22M31V
5514E23N
6615F24O(pad)=
7716G25P
8817H26Q

base-64-alphabet

Base 64 alphabet

ValueEncodingValueEncodingValueEncodingValueEncoding
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w(pad)=
15P32g49x
16Q33h50y

base-64-url-and-filename-safe-alphabet

Base 64 (URL and filename safe) alphabet

ValueEncodingValueEncodingValueEncodingValueEncoding
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62-
12M29d46u63_
13N30e47v
14O31f48w(pad)=
15P32g49x
16Q33h50y

Link to this section Summary

Functions

Decodes a base 16 encoded string into a binary string.

Decodes a base 16 encoded string into a binary string.

Decodes a base 32 encoded string into a binary string.

Decodes a base 32 encoded string into a binary string.

Decodes a base 64 encoded string into a binary string.

Decodes a base 64 encoded string into a binary string.

Encodes a binary string into a base 16 encoded string.

Encodes a binary string into a base 32 encoded string.

Encodes a binary string into a base 64 encoded string.

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

Encodes a binary string into a base 32 encoded string with an extended hexadecimal alphabet.

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

Encodes a binary string into a base 64 encoded string with URL and filename safe alphabet.

Link to this section Functions

Link to this function

decode16!(string, opts \\ [])

View Source
@spec decode16!(
  binary(),
  keyword()
) :: binary()

Decodes a base 16 encoded string into a binary string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

examples

Examples

iex> Base.decode16!("666F6F626172")
"foobar"

iex> Base.decode16!("666f6f626172", case: :lower)
"foobar"

iex> Base.decode16!("666f6F626172", case: :mixed)
"foobar"
Link to this function

decode16(string, opts \\ [])

View Source
@spec decode16(
  binary(),
  keyword()
) :: {:ok, binary()} | :error

Decodes a base 16 encoded string into a binary string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

examples

Examples

iex> Base.decode16("666F6F626172")
{:ok, "foobar"}

iex> Base.decode16("666f6f626172", case: :lower)
{:ok, "foobar"}

iex> Base.decode16("666f6F626172", case: :mixed)
{:ok, "foobar"}
Link to this function

decode32!(string, opts \\ [])

View Source
@spec decode32!(
  binary(),
  keyword()
) :: binary()

Decodes a base 32 encoded string into a binary string.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding
  • :padding - specifies whether to require padding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

The values for :padding can be:

  • true - requires the input string to be padded to the nearest multiple of 8 (default)
  • false - ignores padding from the input string

examples

Examples

iex> Base.decode32!("MZXW6YTBOI======")
"foobar"

iex> Base.decode32!("mzxw6ytboi======", case: :lower)
"foobar"

iex> Base.decode32!("mzXW6ytBOi======", case: :mixed)
"foobar"

iex> Base.decode32!("MZXW6YTBOI", padding: false)
"foobar"
Link to this function

decode32(string, opts \\ [])

View Source
@spec decode32(
  binary(),
  keyword()
) :: {:ok, binary()} | :error

Decodes a base 32 encoded string into a binary string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding
  • :padding - specifies whether to require padding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

The values for :padding can be:

  • true - requires the input string to be padded to the nearest multiple of 8 (default)
  • false - ignores padding from the input string

examples

Examples

iex> Base.decode32("MZXW6YTBOI======")
{:ok, "foobar"}

iex> Base.decode32("mzxw6ytboi======", case: :lower)
{:ok, "foobar"}

iex> Base.decode32("mzXW6ytBOi======", case: :mixed)
{:ok, "foobar"}

iex> Base.decode32("MZXW6YTBOI", padding: false)
{:ok, "foobar"}
Link to this function

decode64!(string, opts \\ [])

View Source
@spec decode64!(
  binary(),
  keyword()
) :: binary()

Decodes a base 64 encoded string into a binary string.

Accepts ignore: :whitespace option which will ignore all the whitespace characters in the input string.

Accepts padding: false option which will ignore padding from the input string.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

examples

Examples

iex> Base.decode64!("Zm9vYmFy")
"foobar"

iex> Base.decode64!("Zm9vYmFy\n", ignore: :whitespace)
"foobar"

iex> Base.decode64!("Zm9vYg==")
"foob"

iex> Base.decode64!("Zm9vYg", padding: false)
"foob"
Link to this function

decode64(string, opts \\ [])

View Source
@spec decode64(
  binary(),
  keyword()
) :: {:ok, binary()} | :error

Decodes a base 64 encoded string into a binary string.

Accepts ignore: :whitespace option which will ignore all the whitespace characters in the input string.

Accepts padding: false option which will ignore padding from the input string.

examples

Examples

iex> Base.decode64("Zm9vYmFy")
{:ok, "foobar"}

iex> Base.decode64("Zm9vYmFy\n", ignore: :whitespace)
{:ok, "foobar"}

iex> Base.decode64("Zm9vYg==")
{:ok, "foob"}

iex> Base.decode64("Zm9vYg", padding: false)
{:ok, "foob"}
Link to this function

encode16(data, opts \\ [])

View Source
@spec encode16(
  binary(),
  keyword()
) :: binary()

Encodes a binary string into a base 16 encoded string.

options

Options

The accepted options are:

  • :case - specifies the character case to use when encoding

The values for :case can be:

  • :upper - uses upper case characters (default)
  • :lower - uses lower case characters

examples

Examples

iex> Base.encode16("foobar")
"666F6F626172"

iex> Base.encode16("foobar", case: :lower)
"666f6f626172"
Link to this function

encode32(data, opts \\ [])

View Source
@spec encode32(
  binary(),
  keyword()
) :: binary()

Encodes a binary string into a base 32 encoded string.

options

Options

The accepted options are:

  • :case - specifies the character case to use when encoding
  • :padding - specifies whether to apply padding

The values for :case can be:

  • :upper - uses upper case characters (default)
  • :lower - uses lower case characters

The values for :padding can be:

  • true - pad the output string to the nearest multiple of 8 (default)
  • false - omit padding from the output string

examples

Examples

iex> Base.encode32("foobar")
"MZXW6YTBOI======"

iex> Base.encode32("foobar", case: :lower)
"mzxw6ytboi======"

iex> Base.encode32("foobar", padding: false)
"MZXW6YTBOI"
Link to this function

encode64(data, opts \\ [])

View Source
@spec encode64(
  binary(),
  keyword()
) :: binary()

Encodes a binary string into a base 64 encoded string.

Accepts padding: false option which will omit padding from the output string.

examples

Examples

iex> Base.encode64("foobar")
"Zm9vYmFy"

iex> Base.encode64("foob")
"Zm9vYg=="

iex> Base.encode64("foob", padding: false)
"Zm9vYg"
Link to this function

hex_decode32!(string, opts \\ [])

View Source
@spec hex_decode32!(
  binary(),
  keyword()
) :: binary()

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding
  • :padding - specifies whether to require padding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

The values for :padding can be:

  • true - requires the input string to be padded to the nearest multiple of 8 (default)
  • false - ignores padding from the input string

examples

Examples

iex> Base.hex_decode32!("CPNMUOJ1E8======")
"foobar"

iex> Base.hex_decode32!("cpnmuoj1e8======", case: :lower)
"foobar"

iex> Base.hex_decode32!("cpnMuOJ1E8======", case: :mixed)
"foobar"

iex> Base.hex_decode32!("CPNMUOJ1E8", padding: false)
"foobar"
Link to this function

hex_decode32(string, opts \\ [])

View Source
@spec hex_decode32(
  binary(),
  keyword()
) :: {:ok, binary()} | :error

Decodes a base 32 encoded string with extended hexadecimal alphabet into a binary string.

options

Options

The accepted options are:

  • :case - specifies the character case to accept when decoding
  • :padding - specifies whether to require padding

The values for :case can be:

  • :upper - only allows upper case characters (default)
  • :lower - only allows lower case characters
  • :mixed - allows mixed case characters

The values for :padding can be:

  • true - requires the input string to be padded to the nearest multiple of 8 (default)
  • false - ignores padding from the input string

examples

Examples

iex> Base.hex_decode32("CPNMUOJ1E8======")
{:ok, "foobar"}

iex> Base.hex_decode32("cpnmuoj1e8======", case: :lower)
{:ok, "foobar"}

iex> Base.hex_decode32("cpnMuOJ1E8======", case: :mixed)
{:ok, "foobar"}

iex> Base.hex_decode32("CPNMUOJ1E8", padding: false)
{:ok, "foobar"}
Link to this function

hex_encode32(data, opts \\ [])

View Source
@spec hex_encode32(
  binary(),
  keyword()
) :: binary()

Encodes a binary string into a base 32 encoded string with an extended hexadecimal alphabet.

options

Options

The accepted options are:

  • :case - specifies the character case to use when encoding
  • :padding - specifies whether to apply padding

The values for :case can be:

  • :upper - uses upper case characters (default)
  • :lower - uses lower case characters

The values for :padding can be:

  • true - pad the output string to the nearest multiple of 8 (default)
  • false - omit padding from the output string

examples

Examples

iex> Base.hex_encode32("foobar")
"CPNMUOJ1E8======"

iex> Base.hex_encode32("foobar", case: :lower)
"cpnmuoj1e8======"

iex> Base.hex_encode32("foobar", padding: false)
"CPNMUOJ1E8"
Link to this function

url_decode64!(string, opts \\ [])

View Source
@spec url_decode64!(
  binary(),
  keyword()
) :: binary()

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

Accepts ignore: :whitespace option which will ignore all the whitespace characters in the input string.

Accepts padding: false option which will ignore padding from the input string.

An ArgumentError exception is raised if the padding is incorrect or a non-alphabet character is present in the string.

examples

Examples

iex> Base.url_decode64!("_3_-_A==")
<<255, 127, 254, 252>>

iex> Base.url_decode64!("_3_-_A==\n", ignore: :whitespace)
<<255, 127, 254, 252>>

iex> Base.url_decode64!("_3_-_A", padding: false)
<<255, 127, 254, 252>>
Link to this function

url_decode64(string, opts \\ [])

View Source
@spec url_decode64(
  binary(),
  keyword()
) :: {:ok, binary()} | :error

Decodes a base 64 encoded string with URL and filename safe alphabet into a binary string.

Accepts ignore: :whitespace option which will ignore all the whitespace characters in the input string.

Accepts padding: false option which will ignore padding from the input string.

examples

Examples

iex> Base.url_decode64("_3_-_A==")
{:ok, <<255, 127, 254, 252>>}

iex> Base.url_decode64("_3_-_A==\n", ignore: :whitespace)
{:ok, <<255, 127, 254, 252>>}

iex> Base.url_decode64("_3_-_A", padding: false)
{:ok, <<255, 127, 254, 252>>}
Link to this function

url_encode64(data, opts \\ [])

View Source
@spec url_encode64(
  binary(),
  keyword()
) :: binary()

Encodes a binary string into a base 64 encoded string with URL and filename safe alphabet.

Accepts padding: false option which will omit padding from the output string.

examples

Examples

iex> Base.url_encode64(<<255, 127, 254, 252>>)
"_3_-_A=="

iex> Base.url_encode64(<<255, 127, 254, 252>>, padding: false)
"_3_-_A"