<?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-00" category="std" consensus="true" submissionType="IETF" obsoletes="4648" tocInclude="true" sortRefs="true" symRefs="false">
  <front>
    <title abbrev="Base-N Encodings">The Base16, Base32, and Base64 Data Encodings</title>

    <author fullname="Simon Josefsson">
      <organization>SJD</organization>
      <address>
        <email>simon@josefsson.org</email>
      </address>
    </author>

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

    <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.</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 [1] 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) [4] 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 [2].</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 [4] 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) [3], 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 [8].  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 do 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>The following description of base 64 is derived from [3], [4], [5],
and [6].  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>

<figure><artwork><![CDATA[
                   Table 1: The Base 64 Alphabet
]]></artwork></figure>

<texttable>
      <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>The Base 64 encoding with an URL and filename safe alphabet has been
used in [12].</t>

<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 [9], but if the data length is known implicitly, this can be
avoided by skipping the padding; see section 3.2.</t>

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

<figure><artwork><![CDATA[
      Table 2: The "URL and Filename safe" Base 64 Alphabet
]]></artwork></figure>

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

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

<t>The following description of base 32 is derived from [11] (with
corrections).  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>

<figure><artwork><![CDATA[
                  Table 3: The Base 32 Alphabet
]]></artwork></figure>

<texttable>
      <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>The following description of base 32 is derived from [7].  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".  This encoding is used by, e.g.,
NextSECure3 (NSEC3) [10].</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>

<figure><artwork><![CDATA[
              Table 4: The "Extended Hex" Base 32 Alphabet
]]></artwork></figure>

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

<figure><artwork><![CDATA[
                      Table 5: The Base 16 Alphabet
]]></artwork></figure>

<texttable>
      <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 [5].</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
[7].  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 [5], 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>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>BASE32-HEX("") = ""</t>

<t>BASE32-HEX("f") = "CO======"</t>

<t>BASE32-HEX("fo") = "CPNG===="</t>

<t>BASE32-HEX("foo") = "CPNMU==="</t>

<t>BASE32-HEX("foob") = "CPNMUOG="</t>

<t>BASE32-HEX("fooba") = "CPNMUOJ1"</t>

<t>BASE32-HEX("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="iso-c99-implementation-of-base64"><name>ISO C99 Implementation of Base64</name>

<t>An ISO C99 implementation of Base64 encoding and decoding that is
believed to follow all recommendations in this RFC is available from:</t>

<figure><artwork><![CDATA[
   http://josefsson.org/base-encoding/
]]></artwork></figure>

<t>This code is not normative.</t>

<t>The code could not be included in this RFC for procedural reasons
(RFC 3978 section 5.4).</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-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>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>This revised version is 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>

</section>
<section anchor="copying-conditions"><name>Copying Conditions</name>

<t>Copyright (c) 2000-2006 Simon Josefsson</t>

<t>Regarding the abstract and sections 1, 3, 8, 10, 12, 13, and 14 of
this document, that were written by Simon Josefsson ("the author",
for the remainder of this section), the author makes no guarantees
and is not responsible for any damage resulting from its use.  The
author grants irrevocable permission to anyone to use, modify, and
distribute it in any way that does not diminish the rights of anyone
else to use, modify, and distribute it, provided that redistributed
derivative works do not contain misleading author or version
information and do not falsely purport to be IETF RFC documents.
Derivative works need not be licensed under similar terms.</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='RFC4033' target='https://www.rfc-editor.org/info/rfc4033'>
  <front>
    <title>DNS Security Introduction and Requirements</title>
    <author fullname='R. Arends' initials='R.' surname='Arends'/>
    <author fullname='R. Austein' initials='R.' surname='Austein'/>
    <author fullname='M. Larson' initials='M.' surname='Larson'/>
    <author fullname='D. Massey' initials='D.' surname='Massey'/>
    <author fullname='S. Rose' initials='S.' surname='Rose'/>
    <date month='March' year='2005'/>
    <abstract>
      <t>The Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System. This document introduces these extensions and describes their capabilities and limitations. This document also discusses the services that the DNS security extensions do and do not provide. Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4033'/>
  <seriesInfo name='DOI' value='10.17487/RFC4033'/>
</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-dnsext-nsec3' target='https://datatracker.ietf.org/doc/html/draft-ietf-dnsext-nsec3-13'>
   <front>
      <title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existence</title>
      <author fullname='Roy Arends' initials='R.' surname='Arends'>
         <organization>Nominet</organization>
      </author>
      <author fullname='Geoffrey Sisson' initials='G.' surname='Sisson'>
         <organization>Nominet</organization>
      </author>
      <author fullname='David Blacka' initials='D.' surname='Blacka'>
         <organization>VeriSign, Inc.</organization>
      </author>
      <author fullname='Ben Laurie' initials='B.' surname='Laurie'>
         <organization>Nominet</organization>
      </author>
      <date day='11' month='December' year='2007'/>
      <abstract>
	 <t>The Domain Name System Security (DNSSEC) Extensions introduced the NSEC resource record (RR) for authenticated denial of existence.  This document introduces an alternative resource record, NSEC3, which similarly provides authenticated denial of existence.  However, it also provides measures against zone enumeration and permits gradual expansion of delegation-centric zones. [STANDARDS-TRACK]
	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-dnsext-nsec3-13'/>
   
</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>


<reference anchor="mojonation" target="http://zgp.org/pipermail/p2p-hackers/2001-September/">
  <front>
    <title>Post to P2P-hackers mailing list</title>
    <author >
      <organization>Wilcox-O'Hearn, B.</organization>
    </author>
    <date year="2001" month="September"/>
  </front>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
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
XsTmWR7pwiBQzrhJRf8H5Ss5l7pnAAA=

-->

</rfc>

