<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="pre5378Trust200902" docName="draft-josefsson-rfc4648bis-02" category="std" consensus="true" submissionType="IETF" obsoletes="4648" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Base-N Encodings">The Base16, Base32, and Base64 Data Encodings</title>

    <author fullname="Simon Josefsson">
      <organization></organization>
      <address>
        <email>simon@josefsson.org</email>
      </address>
    </author>
    <author fullname="Julian Reschke">
      <organization></organization>
      <address>
        <email>julian.reschke@googlemail.com</email>
      </address>
    </author>

    <date year="2026" month="November" day="02"/>

    <area>art</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 38?>

<t>This document describes the commonly used base 64, base 32, and base
16 encoding schemes.  It also discusses the use of line-feeds in
encoded data, use of padding in encoded data, use of non-alphabet
characters in encoded data, use of different encoding alphabets, and
canonical encodings.  This document obsoletes RFC 4648 and changes the
status to Internet Standard.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-josefsson-rfc4648bis/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/jas/ietf-base-encoding"/>.</t>
    </note>


  </front>

  <middle>


<?line 47?>

<section anchor="introduction"><name>Introduction</name>

<t>Base encoding of data is used in many situations to store or transfer
data in environments that, perhaps for legacy reasons, are restricted
to US-ASCII <xref target="RFC0020"></xref> data.  Base encoding can also be used in new
applications that do not have legacy restrictions, simply because it
makes it possible to manipulate objects with text editors.</t>

<t>In the past, different applications have had different requirements
and thus sometimes implemented base encodings in slightly different
ways.  Today, protocol specifications sometimes use base encodings in
general, and "base64" in particular, without a precise description or
reference.  Multipurpose Internet Mail Extensions (MIME) <xref target="RFC2045"></xref> is often
used as a reference for base64 without considering the consequences
for line-wrapping or non-alphabet characters.  The purpose of this
specification is to establish common alphabet and encoding
considerations.  This will hopefully reduce ambiguity in other
documents, leading to better interoperability.</t>

</section>
<section anchor="conventions-used-in-this-document"><name>Conventions Used in This Document</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="implementation-discrepancies"><name>Implementation Discrepancies</name>

<t>Here we discuss the discrepancies between base encoding
implementations in the past and, where appropriate, mandate a specific
recommended behavior for the future.</t>

<section anchor="line-feeds-in-encoded-data"><name>Line Feeds in Encoded Data</name>

<t>MIME <xref target="RFC2045"></xref> is often used as a reference for base 64 encoding.  However,
MIME does not define "base 64" per se, but rather a "base 64 Content-
Transfer-Encoding" for use within MIME.  As such, MIME enforces a
limit on line length of base 64-encoded data to 76 characters.  MIME
inherits the encoding from Privacy Enhanced Mail (PEM) <xref target="RFC1421"></xref>, stating
that it is "virtually identical"; however, PEM uses a line length of
64 characters.  The MIME and PEM limits are both due to limits within
SMTP.</t>

<t>Implementations <bcp14>MUST NOT</bcp14> add line feeds to base-encoded data unless
the specification referring to this document explicitly directs base
encoders to add line feeds after a specific number of characters.</t>

</section>
<section anchor="padding-of-encoded-data"><name>Padding of Encoded Data</name>

<t>In some circumstances, the use of padding ("=") in base-encoded data
is not required or used.  In the general case, when assumptions about
the size of transported data cannot be made, padding is required to
yield correct decoded data.</t>

<t>Implementations <bcp14>MUST</bcp14> include appropriate pad characters at the end of
encoded data unless the specification referring to this document
explicitly states otherwise.</t>

<t>The base64 and base32 alphabets use padding, as described below in
sections 4 and 6, but the base16 alphabet does not need it; see
section 8.</t>

</section>
<section anchor="interpretation-of-non-alphabet-characters-in-encoded-data"><name>Interpretation of Non-Alphabet Characters in Encoded Data</name>

<t>Base encodings use a specific, reduced alphabet to encode binary data.
Non-alphabet characters could exist within base-encoded data, caused
by data corruption or by design.  Non-alphabet characters may be
exploited as a "covert channel", where non-protocol data can be sent
for nefarious purposes.  Non-alphabet characters might also be sent in
order to exploit implementation errors leading to, e.g., buffer
overflow attacks.</t>

<t>Implementations <bcp14>MUST</bcp14> reject the encoded data if it contains characters
outside the base alphabet when interpreting base-encoded data, unless
the specification referring to this document explicitly states
otherwise.  Such specifications may instead state, as MIME does, that
characters outside the base encoding alphabet should simply be ignored
when interpreting data ("be liberal in what you accept").  Note that
this means that any adjacent carriage return/ line feed (CRLF)
characters constitute "non-alphabet characters" and are ignored.
Furthermore, such specifications <bcp14>MAY</bcp14> ignore the pad character, "=",
treating it as non-alphabet data, if it is present before the end of
the encoded data.  If more than the allowed number of pad characters
is found at the end of the string (e.g., a base 64 string terminated
with "==="), the excess pad characters <bcp14>MAY</bcp14> also be ignored.</t>

</section>
<section anchor="choosing-the-alphabet"><name>Choosing the Alphabet</name>

<t>Different applications have different requirements on the characters
in the alphabet.  Here are a few requirements that determine which
alphabet should be used:</t>

<t><list style="symbols">
  <t>Handled by humans.  The characters "0" and "O" are easily confused,
as are "1", "l", and "I".  In the base32 alphabet below, where 0
(zero) and 1 (one) are not present, a decoder may interpret 0 as O,
and 1 as I or L depending on case.  (However, by default it should
not; see previous section.)</t>
  <t>Encoded into structures that mandate other requirements.  For base
16 and base 32, this determines the use of upper- or lowercase
alphabets.  For base 64, the non-alphanumeric characters (in
particular, "/") may be problematic in file names and URLs.</t>
  <t>Used as identifiers.  Certain characters, notably "+" and "/" in the
base 64 alphabet, are treated as word-breaks by legacy text
search/index tools.</t>
</list></t>

<t>There is no universally accepted alphabet that fulfills all the
requirements.  For an example of a highly specialized variant, see
IMAP <xref target="RFC9051"></xref>.  In this document, we document and name some currently
used alphabets.</t>

</section>
<section anchor="canonical-encoding"><name>Canonical Encoding</name>

<t>The padding step in base 64 and base 32 encoding can, if improperly
implemented, lead to non-significant alterations of the encoded data.
For example, if the input is only one octet for a base 64 encoding,
then all six bits of the first symbol are used, but only the first two
bits of the next symbol are used.  These pad bits <bcp14>MUST</bcp14> be set to zero
by conforming encoders, which is described in the descriptions on
padding below.  If this property does not hold, there is no canonical
representation of base-encoded data, and multiple base- encoded
strings can be decoded to the same binary data.  If this property (and
others discussed in this document) holds, a canonical encoding is
guaranteed.</t>

<t>In some environments, the alteration is critical and therefore
decoders <bcp14>MAY</bcp14> chose to reject an encoding if the pad bits have not been
set to zero.  The specification referring to this may mandate a
specific behaviour.</t>

</section>
</section>
<section anchor="base-64-encoding"><name>Base 64 Encoding</name>

<t>We now describe the Base 64 encoding.  This encoding may be referred
to as "base64".</t>

<t>The Base 64 encoding is designed to represent arbitrary sequences of
octets in a form that allows the use of both upper- and lowercase
letters but that need not be human readable.</t>

<t>A 65-character subset of US-ASCII is used, enabling 6 bits to be
represented per printable character.  (The extra 65th character, "=",
is used to signify a special processing function.)</t>

<t>The encoding process represents 24-bit groups of input bits as output
strings of 4 encoded characters.  Proceeding from left to right, a
24-bit input group is formed by concatenating 3 8-bit input groups.
These 24 bits are then treated as 4 concatenated 6-bit groups, each
of which is translated into a single character in the base 64
alphabet.</t>

<t>Each 6-bit group is used as an index into an array of 64 printable
characters.  The character referenced by the index is placed in the
output string.</t>

<texttable title="The Base 64 Alphabet" anchor="_table-base64">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>A</c>
      <c>17</c>
      <c>R</c>
      <c>34</c>
      <c>i</c>
      <c>51</c>
      <c>z</c>
      <c>1</c>
      <c>B</c>
      <c>18</c>
      <c>S</c>
      <c>35</c>
      <c>j</c>
      <c>52</c>
      <c>0</c>
      <c>2</c>
      <c>C</c>
      <c>19</c>
      <c>T</c>
      <c>36</c>
      <c>k</c>
      <c>53</c>
      <c>1</c>
      <c>3</c>
      <c>D</c>
      <c>20</c>
      <c>U</c>
      <c>37</c>
      <c>l</c>
      <c>54</c>
      <c>2</c>
      <c>4</c>
      <c>E</c>
      <c>21</c>
      <c>V</c>
      <c>38</c>
      <c>m</c>
      <c>55</c>
      <c>3</c>
      <c>5</c>
      <c>F</c>
      <c>22</c>
      <c>W</c>
      <c>39</c>
      <c>n</c>
      <c>56</c>
      <c>4</c>
      <c>6</c>
      <c>G</c>
      <c>23</c>
      <c>X</c>
      <c>40</c>
      <c>o</c>
      <c>57</c>
      <c>5</c>
      <c>7</c>
      <c>H</c>
      <c>24</c>
      <c>Y</c>
      <c>41</c>
      <c>p</c>
      <c>58</c>
      <c>6</c>
      <c>8</c>
      <c>I</c>
      <c>25</c>
      <c>Z</c>
      <c>42</c>
      <c>q</c>
      <c>59</c>
      <c>7</c>
      <c>9</c>
      <c>J</c>
      <c>26</c>
      <c>a</c>
      <c>43</c>
      <c>r</c>
      <c>60</c>
      <c>8</c>
      <c>10</c>
      <c>K</c>
      <c>27</c>
      <c>b</c>
      <c>44</c>
      <c>s</c>
      <c>61</c>
      <c>9</c>
      <c>11</c>
      <c>L</c>
      <c>28</c>
      <c>c</c>
      <c>45</c>
      <c>t</c>
      <c>62</c>
      <c>+</c>
      <c>12</c>
      <c>M</c>
      <c>29</c>
      <c>d</c>
      <c>46</c>
      <c>u</c>
      <c>63</c>
      <c>/</c>
      <c>13</c>
      <c>N</c>
      <c>30</c>
      <c>e</c>
      <c>47</c>
      <c>v</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>14</c>
      <c>O</c>
      <c>31</c>
      <c>f</c>
      <c>48</c>
      <c>w</c>
      <c>(pad)</c>
      <c>=</c>
      <c>15</c>
      <c>P</c>
      <c>32</c>
      <c>g</c>
      <c>49</c>
      <c>x</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>16</c>
      <c>Q</c>
      <c>33</c>
      <c>h</c>
      <c>50</c>
      <c>y</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>Special processing is performed if fewer than 24 bits are available
at the end of the data being encoded.  A full encoding quantum is
always completed at the end of a quantity.  When fewer than 24 input
bits are available in an input group, bits with value zero are added
(on the right) to form an integral number of 6-bit groups.  Padding
at the end of the data is performed using the '=' character.  Since
all base 64 input is an integral number of octets, only the following
cases can arise:</t>

<t><list style="numbers" type="1">
  <t>The final quantum of encoding input is an integral multiple of 24
bits; here, the final unit of encoded output will be an integral
multiple of 4 characters with no "=" padding.</t>
  <t>The final quantum of encoding input is exactly 8 bits; here, the
final unit of encoded output will be two characters followed by
two "=" padding characters.</t>
  <t>The final quantum of encoding input is exactly 16 bits; here, the
final unit of encoded output will be three characters followed by
one "=" padding character.</t>
</list></t>

</section>
<section anchor="base-64-encoding-with-url-and-filename-safe-alphabet"><name>Base 64 Encoding with URL and Filename Safe Alphabet</name>

<t>We now describe the Base 64 encoding with an URL and filename safe
alphabet.  This encoding may be referred to as "base64url".  This
encoding should not be regarded as the same as the "base64" encoding
and should not be referred to as only "base64".  Unless clarified
otherwise, "base64" refers to the base 64 in the previous section.</t>

<t>This encoding is technically identical to the previous one, except
for the 62:nd and 63:rd alphabet character, as indicated in Table 2.</t>

<texttable title="The &quot;URL and Filename safe&quot; Base 64 Alphabet" anchor="_table-base64url">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>A</c>
      <c>17</c>
      <c>R</c>
      <c>34</c>
      <c>i</c>
      <c>51</c>
      <c>z</c>
      <c>1</c>
      <c>B</c>
      <c>18</c>
      <c>S</c>
      <c>35</c>
      <c>j</c>
      <c>52</c>
      <c>0</c>
      <c>2</c>
      <c>C</c>
      <c>19</c>
      <c>T</c>
      <c>36</c>
      <c>k</c>
      <c>53</c>
      <c>1</c>
      <c>3</c>
      <c>D</c>
      <c>20</c>
      <c>U</c>
      <c>37</c>
      <c>l</c>
      <c>54</c>
      <c>2</c>
      <c>4</c>
      <c>E</c>
      <c>21</c>
      <c>V</c>
      <c>38</c>
      <c>m</c>
      <c>55</c>
      <c>3</c>
      <c>5</c>
      <c>F</c>
      <c>22</c>
      <c>W</c>
      <c>39</c>
      <c>n</c>
      <c>56</c>
      <c>4</c>
      <c>6</c>
      <c>G</c>
      <c>23</c>
      <c>X</c>
      <c>40</c>
      <c>o</c>
      <c>57</c>
      <c>5</c>
      <c>7</c>
      <c>H</c>
      <c>24</c>
      <c>Y</c>
      <c>41</c>
      <c>p</c>
      <c>58</c>
      <c>6</c>
      <c>8</c>
      <c>I</c>
      <c>25</c>
      <c>Z</c>
      <c>42</c>
      <c>q</c>
      <c>59</c>
      <c>7</c>
      <c>9</c>
      <c>J</c>
      <c>26</c>
      <c>a</c>
      <c>43</c>
      <c>r</c>
      <c>60</c>
      <c>8</c>
      <c>10</c>
      <c>K</c>
      <c>27</c>
      <c>b</c>
      <c>44</c>
      <c>s</c>
      <c>61</c>
      <c>9</c>
      <c>11</c>
      <c>L</c>
      <c>28</c>
      <c>c</c>
      <c>45</c>
      <c>t</c>
      <c>62</c>
      <c>- (minus)</c>
      <c>12</c>
      <c>M</c>
      <c>29</c>
      <c>d</c>
      <c>46</c>
      <c>u</c>
      <c>63</c>
      <c>_ (underline)</c>
      <c>13</c>
      <c>N</c>
      <c>30</c>
      <c>e</c>
      <c>47</c>
      <c>v</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>14</c>
      <c>O</c>
      <c>31</c>
      <c>f</c>
      <c>48</c>
      <c>w</c>
      <c>(pad)</c>
      <c>=</c>
      <c>15</c>
      <c>P</c>
      <c>32</c>
      <c>g</c>
      <c>49</c>
      <c>x</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>16</c>
      <c>Q</c>
      <c>33</c>
      <c>h</c>
      <c>50</c>
      <c>y</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>An alternative alphabet has been suggested that would use "~" as the
63rd character.  Since the "~" character has special meaning in some
file system environments, the encoding described in this section is
recommended instead.  The remaining unreserved URI character is ".",
but some file system environments do not permit multiple "." in a
filename, thus making the "." character unattractive as well.</t>

<t>The pad character "=" is typically percent-encoded when used in an URI
<xref target="RFC3986"></xref>, but if the data length is known implicitly, this can be
avoided by skipping the padding; see section 3.2.</t>

</section>
<section anchor="base-32-encoding"><name>Base 32 Encoding</name>

<t>We now describe the Base 32 encoding.  This encoding may be referred
to as "base32".</t>

<t>The Base 32 encoding is designed to represent arbitrary sequences of
octets in a form that needs to be case insensitive but that need not
be human readable.</t>

<t>A 33-character subset of US-ASCII is used, enabling 5 bits to be
represented per printable character.  (The extra 33rd character, "=",
is used to signify a special processing function.)</t>

<t>The encoding process represents 40-bit groups of input bits as output
strings of 8 encoded characters.  Proceeding from left to right, a
40-bit input group is formed by concatenating 5 8bit input groups.
These 40 bits are then treated as 8 concatenated 5-bit groups, each
of which is translated into a single character in the base 32
alphabet.  When a bit stream is encoded via the base 32 encoding, the
bit stream must be presumed to be ordered with the most-significant-
bit first.  That is, the first bit in the stream will be the high-
order bit in the first 8bit byte, the eighth bit will be the low-
order bit in the first 8bit byte, and so on.</t>

<t>Each 5-bit group is used as an index into an array of 32 printable
characters.  The character referenced by the index is placed in the
output string.  These characters, identified in Table 3, below, are
selected from US-ASCII digits and uppercase letters.</t>

<texttable title="The Base 32 Alphabet" anchor="_table-base32">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>A</c>
      <c>9</c>
      <c>J</c>
      <c>18</c>
      <c>S</c>
      <c>27</c>
      <c>3</c>
      <c>1</c>
      <c>B</c>
      <c>10</c>
      <c>K</c>
      <c>19</c>
      <c>T</c>
      <c>28</c>
      <c>4</c>
      <c>2</c>
      <c>C</c>
      <c>11</c>
      <c>L</c>
      <c>20</c>
      <c>U</c>
      <c>29</c>
      <c>5</c>
      <c>3</c>
      <c>D</c>
      <c>12</c>
      <c>M</c>
      <c>21</c>
      <c>V</c>
      <c>30</c>
      <c>6</c>
      <c>4</c>
      <c>E</c>
      <c>13</c>
      <c>N</c>
      <c>22</c>
      <c>W</c>
      <c>31</c>
      <c>7</c>
      <c>5</c>
      <c>F</c>
      <c>14</c>
      <c>O</c>
      <c>23</c>
      <c>X</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>6</c>
      <c>G</c>
      <c>15</c>
      <c>P</c>
      <c>24</c>
      <c>Y</c>
      <c>(pad)</c>
      <c>=</c>
      <c>7</c>
      <c>H</c>
      <c>16</c>
      <c>Q</c>
      <c>25</c>
      <c>Z</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>8</c>
      <c>I</c>
      <c>17</c>
      <c>R</c>
      <c>26</c>
      <c>2</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

<t>Special processing is performed if fewer than 40 bits are available
at the end of the data being encoded.  A full encoding quantum is
always completed at the end of a body.  When fewer than 40 input bits
are available in an input group, bits with value zero are added (on
the right) to form an integral number of 5-bit groups.  Padding at
the end of the data is performed using the "=" character.  Since all
base 32 input is an integral number of octets, only the following
cases can arise:</t>

<t><list style="numbers" type="1">
  <t>The final quantum of encoding input is an integral multiple of 40
bits; here, the final unit of encoded output will be an integral
multiple of 8 characters with no "=" padding.</t>
  <t>The final quantum of encoding input is exactly 8 bits; here, the
final unit of encoded output will be two characters followed by
six "=" padding characters.</t>
  <t>The final quantum of encoding input is exactly 16 bits; here, the
final unit of encoded output will be four characters followed by
four "=" padding characters.</t>
  <t>The final quantum of encoding input is exactly 24 bits; here, the
final unit of encoded output will be five characters followed by
three "=" padding characters.</t>
  <t>The final quantum of encoding input is exactly 32 bits; here, the
final unit of encoded output will be seven characters followed by
one "=" padding character.</t>
</list></t>

</section>
<section anchor="base-32-encoding-with-extended-hex-alphabet"><name>Base 32 Encoding with Extended Hex Alphabet</name>

<t>We now describe the Base 32 encoding with Extended Hex Alphabet.  This
encoding may be referred to as "base32hex".  This encoding should not
be regarded as the same as the "base32" encoding and should not be
referred to as only "base32".</t>

<t>One property with this alphabet, which the base64 and base32
alphabets lack, is that encoded data maintains its sort order when
the encoded data is compared bit-wise.</t>

<t>This encoding is identical to the previous one, except for the
alphabet.  The new alphabet is found in Table 4.</t>

<texttable title="The &quot;Extended Hex&quot; Base 32 Alphabet" anchor="_table-base32hex">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>0</c>
      <c>9</c>
      <c>9</c>
      <c>18</c>
      <c>I</c>
      <c>27</c>
      <c>R</c>
      <c>1</c>
      <c>1</c>
      <c>10</c>
      <c>A</c>
      <c>19</c>
      <c>J</c>
      <c>28</c>
      <c>S</c>
      <c>2</c>
      <c>2</c>
      <c>11</c>
      <c>B</c>
      <c>20</c>
      <c>K</c>
      <c>29</c>
      <c>T</c>
      <c>3</c>
      <c>3</c>
      <c>12</c>
      <c>C</c>
      <c>21</c>
      <c>L</c>
      <c>30</c>
      <c>U</c>
      <c>4</c>
      <c>4</c>
      <c>13</c>
      <c>D</c>
      <c>22</c>
      <c>M</c>
      <c>31</c>
      <c>V</c>
      <c>5</c>
      <c>5</c>
      <c>14</c>
      <c>E</c>
      <c>23</c>
      <c>N</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>6</c>
      <c>6</c>
      <c>15</c>
      <c>F</c>
      <c>24</c>
      <c>O</c>
      <c>(pad)</c>
      <c>=</c>
      <c>7</c>
      <c>7</c>
      <c>16</c>
      <c>G</c>
      <c>25</c>
      <c>P</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>8</c>
      <c>8</c>
      <c>17</c>
      <c>H</c>
      <c>26</c>
      <c>Q</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

</section>
<section anchor="base-16-encoding"><name>Base 16 Encoding</name>

<t>The following description is original but analogous to previous
descriptions.  Essentially, Base 16 encoding is the standard case-
insensitive hex encoding and may be referred to as "base16" or "hex".</t>

<t>A 16-character subset of US-ASCII is used, enabling 4 bits to be
represented per printable character.</t>

<t>The encoding process represents 8-bit groups (octets) of input bits
as output strings of 2 encoded characters.  Proceeding from left to
right, an 8-bit input is taken from the input data.  These 8 bits are
then treated as 2 concatenated 4-bit groups, each of which is
translated into a single character in the base 16 alphabet.</t>

<t>Each 4-bit group is used as an index into an array of 16 printable
characters.  The character referenced by the index is placed in the
output string.</t>

<texttable title="The Base 16 Alphabet" anchor="_table-base16">
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <c>0</c>
      <c>0</c>
      <c>4</c>
      <c>4</c>
      <c>8</c>
      <c>8</c>
      <c>12</c>
      <c>C</c>
      <c>1</c>
      <c>1</c>
      <c>5</c>
      <c>5</c>
      <c>9</c>
      <c>9</c>
      <c>13</c>
      <c>D</c>
      <c>2</c>
      <c>2</c>
      <c>6</c>
      <c>6</c>
      <c>10</c>
      <c>A</c>
      <c>14</c>
      <c>E</c>
      <c>3</c>
      <c>3</c>
      <c>7</c>
      <c>7</c>
      <c>11</c>
      <c>B</c>
      <c>15</c>
      <c>F</c>
</texttable>

<t>Unlike base 32 and base 64, no special padding is necessary since a
full code word is always available.</t>

</section>
<section anchor="illustrations-and-examples"><name>Illustrations and Examples</name>

<t>To translate between binary and a base encoding, the input is stored
in a structure, and the output is extracted.  The case for base 64 is
displayed in the following figure, borrowed from <xref target="RFC2440"></xref>.</t>

<figure><artwork><![CDATA[
         +--first octet--+-second octet--+--third octet--+
         |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
         +-----------+---+-------+-------+---+-----------+
         |5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|
         +--1.index--+--2.index--+--3.index--+--4.index--+
]]></artwork></figure>

<t>The case for base 32 is shown in the following figure, borrowed from
<xref target="RFC2938"></xref>.  Each successive character in a base-32 value represents 5
successive bits of the underlying octet sequence.  Thus, each group of
8 characters represents a sequence of 5 octets (40 bits).</t>

<figure><artwork><![CDATA[
                     1          2          3
          01234567 89012345 67890123 45678901 23456789
         +--------+--------+--------+--------+--------+
         |< 1 >< 2| >< 3 ><|.4 >< 5.|>< 6 ><.|7 >< 8 >|
         +--------+--------+--------+--------+--------+
                                                 <===> 8th character
                                           <====> 7th character
                                      <===> 6th character
                                <====> 5th character
                          <====> 4th character
                     <===> 3rd character
               <====> 2nd character
          <===> 1st character
]]></artwork></figure>

<t>The following example of Base64 data is from <xref target="RFC2440"></xref>, with corrections.</t>

<figure><artwork><![CDATA[
   Input data:  0x14fb9c03d97e
   Hex:     1   4    f   b    9   c     | 0   3    d   9    7   e
   8-bit:   00010100 11111011 10011100  | 00000011 11011001 01111110
   6-bit:   000101 001111 101110 011100 | 000000 111101 100101 111110
   Decimal: 5      15     46     28       0      61     37     62
   Output:  F      P      u      c        A      9      l      +

   Input data:  0x14fb9c03d9
   Hex:     1   4    f   b    9   c     | 0   3    d   9
   8-bit:   00010100 11111011 10011100  | 00000011 11011001
                                                   pad with 00
   6-bit:   000101 001111 101110 011100 | 000000 111101 100100
   Decimal: 5      15     46     28       0      61     36
                                                      pad with =
   Output:  F      P      u      c        A      9      k      =

   Input data:  0x14fb9c03
   Hex:     1   4    f   b    9   c     | 0   3
   8-bit:   00010100 11111011 10011100  | 00000011
                                          pad with 0000
   6-bit:   000101 001111 101110 011100 | 000000 110000
   Decimal: 5      15     46     28       0      48
                                               pad with =      =
   Output:  F      P      u      c        A      w      =      =
]]></artwork></figure>

</section>
<section anchor="test-vectors"><name>Test Vectors</name>

<t>Below input and outputs are represented using ASCII encoded strings.</t>

<t>base64("") = ""</t>

<t>base64("f") = "Zg=="</t>

<t>base64("fo") = "Zm8="</t>

<t>base64("foo") = "Zm9v"</t>

<t>base64("foob") = "Zm9vYg=="</t>

<t>base64("fooba") = "Zm9vYmE="</t>

<t>base64("foobar") = "Zm9vYmFy"</t>

<t>base32("") = ""</t>

<t>base32("f") = "MY======"</t>

<t>base32("fo") = "MZXQ===="</t>

<t>base32("foo") = "MZXW6==="</t>

<t>base32("foob") = "MZXW6YQ="</t>

<t>base32("fooba") = "MZXW6YTB"</t>

<t>base32("foobar") = "MZXW6YTBOI======"</t>

<t>base32hex("") = ""</t>

<t>base32hex("f") = "CO======"</t>

<t>base32hex("fo") = "CPNG===="</t>

<t>base32hex("foo") = "CPNMU==="</t>

<t>base32hex("foob") = "CPNMUOG="</t>

<t>base32hex("fooba") = "CPNMUOJ1"</t>

<t>base32hex("foobar") = "CPNMUOJ1E8======"</t>

<t>base16("") = ""</t>

<t>base16("f") = "66"</t>

<t>base16("fo") = "666F"</t>

<t>base16("foo") = "666F6F"</t>

<t>base16("foob") = "666F6F62"</t>

<t>base16("fooba") = "666F6F6261"</t>

<t>base16("foobar") = "666F6F626172"</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>None.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>When base encoding and decoding is implemented, care should be taken
not to introduce vulnerabilities to buffer overflow attacks, or other
attacks on the implementation.  A decoder should not break on invalid
input including, e.g., embedded NUL characters (ASCII 0).</t>

<t>If non-alphabet characters are ignored, instead of causing rejection
of the entire encoding (as recommended), a covert channel that can be
used to "leak" information is made possible.  The ignored characters
could also be used for other nefarious purposes, such as to avoid a
string equality comparison or to trigger implementation bugs.  The
implications of ignoring non-alphabet characters should be understood
in applications that do not follow the recommended practice.
Similarly, when the base 16 and base 32 alphabets are handled case
insensitively, alteration of case can be used to leak information or
make string equality comparisons fail.</t>

<t>When padding is used, there are some non-significant bits that
warrant security concerns, as they may be abused to leak information
or used to bypass string equality comparisons or to trigger
implementation problems.</t>

<t>Base encoding visually hides otherwise easily recognized information,
such as passwords, but does not provide any computational
confidentiality.  This has been known to cause security incidents
when, e.g., a user reports details of a network protocol exchange
(perhaps to illustrate some other problem) and accidentally reveals
the password because she is unaware that the base encoding does not
protect the password.</t>

<t>Base encoding adds no entropy to the plaintext, but it does increase
the amount of plaintext available and provide a signature for
cryptanalysis in the form of a characteristic probability
distribution.</t>

</section>
<section anchor="changes-since-rfc-4648"><name>Changes Since RFC 4648</name>

<t>Resolved typo reported in RFC errata 7514, thanks to Zachary Collier.
See https://www.rfc-editor.org/errata/eid7514</t>

<t>Remove section "Copying conditions".</t>

<t>Refer to RFC2535 not RFC4033 (bug in RFC 4648).</t>

<t>Drop reference to NSEC.</t>

<t>Drop reference to long removed p2p-hackers mailing list post for
base64url motivation, thanks to Frank Ellermann.  See
https://www.rfc-editor.org/errata/eid2837</t>

<t>Mention that test vectors are encoded using ASCII, thanks to Daniel
Barclay.  See https://www.rfc-editor.org/errata/eid5855</t>

<t>Drop section with pointer to implementation.</t>

<t>Test vectors follows naming guidelines.</t>

<t>Move references to the RFCs we derive text from to Acknowledgements
rather than inline in text.</t>

</section>
<section anchor="changes-since-rfc-3548"><name>Changes Since RFC 3548</name>

<t>Added the "base32 extended hex alphabet", needed to preserve sort
order of encoded data.</t>

<t>Referenced IMAP for the special Base64 encoding used there.</t>

<t>Fixed the example copied from RFC 2440.</t>

<t>Added security consideration about providing a signature for
cryptoanalysis.</t>

<t>Added test vectors.</t>

<t>Fixed typos.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The base64 description is derived from <xref target="RFC1421"></xref>, <xref target="RFC2045"></xref>,
<xref target="RFC2440"></xref>, and <xref target="RFC2535"></xref>.</t>

<t>The base32 description is derived from <xref target="I-D.ietf-cat-sasl-gssapi"></xref>.</t>

<t>The base32hex description is derived from <xref target="RFC2938"></xref>.</t>

<t>For RFC 3548, several people offered comments and/or suggestions,
including John E.  Hadstate, Tony Hansen, Gordon Mohr, John Myers,
Chris Newman, and Andrew Sieber.  Text used in this document are based
on earlier RFCs describing specific uses of various base encodings.
The author acknowledges the RSA Laboratories for supporting the work
that led to this document.</t>

<t>The RFC 4648 version was based in parts on comments and/or suggestions
made by Roy Arends, Eric Blake, Brian E Carpenter, Elwyn Davies, Bill
Fenner, Sam Hartman, Ted Hardie, Per Hygum, Jelte Jansen, Clement
Kent, Tero Kivinen, Paul Kwiatkowski, and Ben Laurie.</t>

<t>Thanks to the following people for review and comments that led to RFC
4648bis: Julian Reschke, Carsten Bormann, Zachary Collier, Daniel
Barclay, and Frank Ellermann.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC0020">
  <front>
    <title>ASCII format for network interchange</title>
    <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
    <date month="October" year="1969"/>
  </front>
  <seriesInfo name="STD" value="80"/>
  <seriesInfo name="RFC" value="20"/>
  <seriesInfo name="DOI" value="10.17487/RFC20"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC1421">
  <front>
    <title>Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures</title>
    <author fullname="J. Linn" initials="J." surname="Linn"/>
    <date month="February" year="1993"/>
    <abstract>
      <t>This document defines message encryption and authentication procedures, in order to provide privacy-enhanced mail (PEM) services for electronic mail transfer in the Internet. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1421"/>
  <seriesInfo name="DOI" value="10.17487/RFC1421"/>
</reference>
<reference anchor="RFC2045">
  <front>
    <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2045"/>
  <seriesInfo name="DOI" value="10.17487/RFC2045"/>
</reference>
<reference anchor="RFC2440">
  <front>
    <title>OpenPGP Message Format</title>
    <author fullname="J. Callas" initials="J." surname="Callas"/>
    <author fullname="L. Donnerhacke" initials="L." surname="Donnerhacke"/>
    <author fullname="H. Finney" initials="H." surname="Finney"/>
    <author fullname="R. Thayer" initials="R." surname="Thayer"/>
    <date month="November" year="1998"/>
    <abstract>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2440"/>
  <seriesInfo name="DOI" value="10.17487/RFC2440"/>
</reference>
<reference anchor="RFC2535">
  <front>
    <title>Domain Name System Security Extensions</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <date month="March" year="1999"/>
    <abstract>
      <t>This document incorporates feedback on RFC 2065 from early implementers and potential users. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2535"/>
  <seriesInfo name="DOI" value="10.17487/RFC2535"/>
</reference>
<reference anchor="RFC2938">
  <front>
    <title>Identifying Composite Media Features</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="September" year="2000"/>
    <abstract>
      <t>This document describes an abbreviated format for a composite media feature set, based upon a hash of the feature expression describing that composite. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2938"/>
  <seriesInfo name="DOI" value="10.17487/RFC2938"/>
</reference>
<reference anchor="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="January" year="2005"/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference>
<reference anchor="RFC9051">
  <front>
    <title>Internet Message Access Protocol (IMAP) - Version 4rev2</title>
    <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
    <author fullname="B. Leiba" initials="B." role="editor" surname="Leiba"/>
    <date month="August" year="2021"/>
    <abstract>
      <t>The Internet Message Access Protocol Version 4rev2 (IMAP4rev2) allows a client to access and manipulate electronic mail messages on a server. IMAP4rev2 permits manipulation of mailboxes (remote message folders) in a way that is functionally equivalent to local folders. IMAP4rev2 also provides the capability for an offline client to resynchronize with the server.</t>
      <t>IMAP4rev2 includes operations for creating, deleting, and renaming mailboxes; checking for new messages; removing messages permanently; setting and clearing flags; parsing per RFCs 5322, 2045, and 2231; searching; and selective fetching of message attributes, texts, and portions thereof. Messages in IMAP4rev2 are accessed by the use of numbers. These numbers are either message sequence numbers or unique identifiers.</t>
      <t>IMAP4rev2 does not specify a means of posting mail; this function is handled by a mail submission protocol such as the one specified in RFC 6409.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9051"/>
  <seriesInfo name="DOI" value="10.17487/RFC9051"/>
</reference>

<reference anchor="I-D.ietf-cat-sasl-gssapi">
   <front>
      <title>SASL GSSAPI mechanisms</title>
      <author fullname="John G. Myers" initials="J. G." surname="Myers">
         <organization>Netscape Communications</organization>
      </author>
      <author fullname="Alexey Melnikov" initials="A." surname="Melnikov">
         </author>
      <date day="31" month="May" year="2001"/>
      <abstract>
	 <t>The Simple Authentication and Security Layer [SASL] is a method for
adding authentication support to connection-based protocols.  This
document describes the method for using the Generic Security Service
Application Program Interface [GSSAPI] in the Simple Authentication
and Security Layer [SASL].
This document amends section 7.2 of RFC 2222 [SASL], the definition
of the &#x27;GSSAPI&#x27; SASL mechanism.
	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-cat-sasl-gssapi-05"/>
   
</reference>



    </references>



  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+1d63Ybx5H+30/RC/8IFQMUcSFEMZazFEVZdERJFqk4juOT
0wAaxJiDGWQupJAofpZ9ln2yra/6OgNQJuVkT3ZP6GMKmJnurq6qrvqquqfY
6/VElVSpPpSdi4WWT1Wp++Mu/zscdKXKZvx5PJLPVKXkSTbNZ0l2WXaEmkwK
fU3tcL/3Kr41VZW+zIv1oSyrmZjl00wtaYRZoeZV78e81POyzLNeMZ+OxqOD
SVL29gYiWRWHclXo/eGjg4uiLqvB3t5jup5PyjzVlS4PJZ4WqtDqUKqiEld6
fZMXs0N5mlW6yHTVe4YRRFlPlklZJnl2sV7RuKcnF8/Ftc5qfSikrPha59u8
uCJq5VdFXq86dL3Qq5yuL6pqVR4+fHhJXFGT3Wm+fPijKh8mupr3JpiptvPs
iLIi9vxZpXlGHa51KVYJD5BPD2VV1Jo+l3lRFTTdcGG9jL6rulrkBTXq0S0p
53WaGladJ8s8k187VvFdvVRJSizFrf/0XNzNi8vN9l/XaaIy+VaX08WVjpv/
yHd2C3PnPy/z/DLlW5iqyPJiqarkmjn19vnx3t5g71Ak2bx1vT8a9O3Hwd5o
330cjfbcx/2hv/p4eGA/Dh8fjO3Hx3v73MNp79kuM5eUpleqMu1dlqUCJ0Wv
15NqUlaFmlZCXCySUpIu1UudVXJG9BfJRJeyIrUl0okp6VrWpZ5JiEmOR13z
wakxvoj+WDr5SWKAXupyl2iopErLXM6SclqXpe2U+pL5XKZJpntzrWelTDLB
rWmMGa2GrntkpWbcY5LJrfczUnaVrhZqoisxXShMSBflrc/PkvlcF5imJ9Y1
L3kytMKoz2SqUv8E5tFkkV84YDevHeYDjZ9dmilCg6uaPuZ+CclzKLUqZruG
/8tkNku1EJ/hiSKf1dOK1pX822dJ9PXvQsAIBGoxB5gLIoclQhNdqmxNulvV
Ci14zLLKC5pvQWtBZSXNWJhG4Mp1UuQZpgFCVdWVK10s1KqUpIky1ZdquqYV
q2gBgCPUDSl0VSTE15mgrt+d947Oj09P5fdWiX9ggohHTUKJj0b0E+0pzfSN
UKtVSuy1pBIBxFYSYyUX6lqH8c2QCRNB63JFGjjRUwUxJpVYqivic1LJVU7W
aJJqTJr4kKzqlCwkCehHPaUJ3iTVQlb6PYl7lhBPSuL9acY6uFIlzT3oQ4Mu
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

-->

</rfc>

