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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>


<rfc ipr="pre5378Trust200902" docName="draft-josefsson-rfc4648bis-01" 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>

    <date year="2025" month="October" day="12"/>

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

    <abstract>


<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>


<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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in <xref target="RFC2119"></xref>.</t>

</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 MUST NOT 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 MUST 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 MUST 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 MAY 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 MAY 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="RFC3501"></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 MUST 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 MAY 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">
  <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">
  <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'>



<reference anchor='RFC0020' target='https://www.rfc-editor.org/info/rfc20'>
  <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/RFC0020'/>
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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>




    </references>

    <references title='Informative References'>



<reference anchor='RFC1421' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='RFC3501' target='https://www.rfc-editor.org/info/rfc3501'>
  <front>
    <title>INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1</title>
    <author fullname='M. Crispin' initials='M.' surname='Crispin'/>
    <date month='March' year='2003'/>
    <abstract>
      <t>The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1) allows a client to access and manipulate electronic mail messages on a server. IMAP4rev1 permits manipulation of mailboxes (remote message folders) in a way that is functionally equivalent to local folders. IMAP4rev1 also provides the capability for an offline client to resynchronize with the server. IMAP4rev1 includes operations for creating, deleting, and renaming mailboxes, checking for new messages, permanently removing messages, setting and clearing flags, RFC 2822 and RFC 2045 parsing, searching, and selective fetching of message attributes, texts, and portions thereof. Messages in IMAP4rev1 are accessed by the use of numbers. These numbers are either message sequence numbers or unique identifiers. IMAP4rev1 supports a single server. A mechanism for accessing configuration information to support multiple IMAP4rev1 servers is discussed in RFC 2244. IMAP4rev1 does not specify a means of posting mail; this function is handled by a mail transfer protocol such as RFC 2821. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3501'/>
  <seriesInfo name='DOI' value='10.17487/RFC3501'/>
</reference>

<reference anchor='RFC3986' target='https://www.rfc-editor.org/info/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='I-D.ietf-cat-sasl-gssapi' target='https://datatracker.ietf.org/doc/html/draft-ietf-cat-sasl-gssapi-05'>
   <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:
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
zu6n23bQ3ZaLMCS2nZb4H7xQALhpZwAA

-->

</rfc>

