rfc9285v3.txt | rfc9285.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) P. Fältström | Internet Engineering Task Force (IETF) P. Fältström | |||
Request for Comments: 9285 Netnod | Request for Comments: 9285 Netnod | |||
Category: Informational F. Ljunggren | Category: Informational F. Ljunggren | |||
ISSN: 2070-1721 Kirei | ISSN: 2070-1721 Kirei | |||
D. van Gulik | D.W. van Gulik | |||
Webweaving | Webweaving | |||
August 2022 | August 2022 | |||
The Base45 Data Encoding | The Base45 Data Encoding | |||
Abstract | Abstract | |||
This document describes the Base45 encoding scheme, which is built | This document describes the Base45 encoding scheme, which is built | |||
upon the Base64, Base32, and Base16 encoding schemes. | upon the Base64, Base32, and Base16 encoding schemes. | |||
skipping to change at line 194 ¶ | skipping to change at line 194 ¶ | |||
Table 1: The Base45 Alphabet | Table 1: The Base45 Alphabet | |||
4.3. Encoding Examples | 4.3. Encoding Examples | |||
It should be noted that although the examples are all text, Base45 is | It should be noted that although the examples are all text, Base45 is | |||
an encoding for binary data where each octet can have any value | an encoding for binary data where each octet can have any value | |||
0-255. | 0-255. | |||
Encoding example 1: | Encoding example 1: | |||
The string "AB" is the byte sequence [[65 66]]. | The string "AB" is the byte sequence [[65 66]]. If we look at all | |||
If we look at all 16 bits, we get 65 * 256 + 66 = 16706. | 16 bits, we get 65 * 256 + 66 = 16706. 16706 equals 11 + (11 * | |||
16706 equals 11 + (11 * 45) + (8 * 45 * 45), so the sequence in | 45) + (8 * 45 * 45), so the sequence in base 45 is [11 11 8]. | |||
base 45 is [11 11 8]. | ||||
Referring to Table 1, we get the encoded string "BB8". | Referring to Table 1, we get the encoded string "BB8". | |||
+-----------+------------------+ | +-----------+------------------+ | |||
| AB | Initial string | | | AB | Initial string | | |||
+-----------+------------------+ | +-----------+------------------+ | |||
| [[65 66]] | Decimal value | | | [[65 66]] | Decimal value | | |||
+-----------+------------------+ | +-----------+------------------+ | |||
| [16706] | Value in base 16 | | | [16706] | Value in base 16 | | |||
+-----------+------------------+ | +-----------+------------------+ | |||
| [11 11 8] | Value in base 45 | | | [11 11 8] | Value in base 45 | | |||
+-----------+------------------+ | +-----------+------------------+ | |||
| BB8 | Encoded string | | | BB8 | Encoded string | | |||
+-----------+------------------+ | +-----------+------------------+ | |||
Table 2: Example 1 in Detail | Table 2: Example 1 in Detail | |||
Encoding example 2: | Encoding example 2: | |||
The string "Hello!!" as ASCII is the byte sequence [[72 101] [108 | The string "Hello!!" as ASCII is the byte sequence [[72 101] [108 | |||
108] [111 33] [33]]. | 108] [111 33] [33]]. If we look at this 16 bits at a time, we get | |||
If we look at this 16 bits at a time, we get [18533 27756 28449 | [18533 27756 28449 33]. Note the 33 for the last byte. When | |||
33]. Note the 33 for the last byte. | looking at the values in base 45, we get [[38 6 9] [36 31 13] [9 2 | |||
When looking at the values in base 45, we get [[38 6 9] [36 31 13] | 14] [33 0]], where the last byte is represented by two values. | |||
[9 2 14] [33 0]], where the last byte is represented by two | ||||
values. | ||||
The resulting string "%69 VD92EX0" is created by looking up these | The resulting string "%69 VD92EX0" is created by looking up these | |||
values in Table 1. It should be noted it includes a space. | values in Table 1. It should be noted it includes a space. | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
| Hello!! | Initial string | | | Hello!! | Initial string | | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
| [[72 101] [108 108] [111 33] [33]] | Decimal value | | | [[72 101] [108 108] [111 33] [33]] | Decimal value | | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
| [18533 27756 28449 33] | Value in base 16 | | | [18533 27756 28449 33] | Value in base 16 | | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
| [[38 6 9] [36 31 13] [9 2 14] [33 0]] | Value in base 45 | | | [[38 6 9] [36 31 13] [9 2 14] [33 0]] | Value in base 45 | | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
| %69 VD92EX0 | Encoded string | | | %69 VD92EX0 | Encoded string | | |||
+---------------------------------------+------------------+ | +---------------------------------------+------------------+ | |||
Table 3: Example 2 in Detail | Table 3: Example 2 in Detail | |||
Encoding example 3: | Encoding example 3: | |||
The string "base-45" as ASCII is the byte sequence [[98 97] [115 | The string "base-45" as ASCII is the byte sequence [[98 97] [115 | |||
101] [45 52] [53]]. | 101] [45 52] [53]]. If we look at this two bytes at a time, we | |||
If we look at this two bytes at a time, we get [25185 29541 11572 | get [25185 29541 11572 53]. Note the 53 for the last byte. When | |||
53]. Note the 53 for the last byte. | looking at the values in base 45, we get [[30 19 12] [21 26 14] [7 | |||
When looking at the values in base 45, we get [[30 19 12] [21 26 | 32 5] [8 1]] where the last byte is represented by two values. | |||
14] [7 32 5] [8 1]] where the last byte is represented by two | ||||
values. | ||||
Referring to Table 1, we get the encoded string "UJCLQE7W581". | Referring to Table 1, we get the encoded string "UJCLQE7W581". | |||
+----------------------------------------+------------------+ | +----------------------------------------+------------------+ | |||
| base-45 | Initial string | | | base-45 | Initial string | | |||
+----------------------------------------+------------------+ | +----------------------------------------+------------------+ | |||
| [[98 97] [115 101] [45 52] [53]] | Decimal value | | | [[98 97] [115 101] [45 52] [53]] | Decimal value | | |||
+----------------------------------------+------------------+ | +----------------------------------------+------------------+ | |||
| [25185 29541 11572 53] | Value in base 16 | | | [25185 29541 11572 53] | Value in base 16 | | |||
+----------------------------------------+------------------+ | +----------------------------------------+------------------+ | |||
| [[30 19 12] [21 26 14] [7 32 5] [8 1]] | Value in base 45 | | | [[30 19 12] [21 26 14] [7 32 5] [8 1]] | Value in base 45 | | |||
skipping to change at line 270 ¶ | skipping to change at line 265 ¶ | |||
| UJCLQE7W581 | Encoded string | | | UJCLQE7W581 | Encoded string | | |||
+----------------------------------------+------------------+ | +----------------------------------------+------------------+ | |||
Table 4: Example 3 in Detail | Table 4: Example 3 in Detail | |||
4.4. Decoding Example | 4.4. Decoding Example | |||
Decoding example 1: | Decoding example 1: | |||
The string "QED8WEX0" represents, when looked up in Table 1, the | The string "QED8WEX0" represents, when looked up in Table 1, the | |||
values [26 14 13 8 32 14 33 0]. | values [26 14 13 8 32 14 33 0]. We arrange the numbers in chunks | |||
We arrange the numbers in chunks of three, except for the last one | of three, except for the last one which can be two numbers, and | |||
which can be two numbers, and get [[26 14 13] [8 32 14] [33 0]]. | get [[26 14 13] [8 32 14] [33 0]]. In base 45, we get [26981 | |||
In base 45, we get [26981 29798 33] where the bytes are [[105 101] | 29798 33] where the bytes are [[105 101] [116 102] [33]]. If we | |||
[116 102] [33]]. | look at the ASCII values, we get the string "ietf!". | |||
If we look at the ASCII values, we get the string "ietf!". | ||||
+-------------------------------+------------------------+ | +-------------------------------+------------------------+ | |||
| QED8WEX0 | Initial string | | | QED8WEX0 | Initial string | | |||
+-------------------------------+------------------------+ | +-------------------------------+------------------------+ | |||
| [26 14 13 8 32 14 33 0] | Looked up values | | | [26 14 13 8 32 14 33 0] | Looked up values | | |||
+-------------------------------+------------------------+ | +-------------------------------+------------------------+ | |||
| [[26 14 13] [8 32 14] [33 0]] | Groups of three | | | [[26 14 13] [8 32 14] [33 0]] | Groups of three | | |||
+-------------------------------+------------------------+ | +-------------------------------+------------------------+ | |||
| [26981 29798 33] | Interpreted as base 45 | | | [26981 29798 33] | Interpreted as base 45 | | |||
+-------------------------------+------------------------+ | +-------------------------------+------------------------+ | |||
End of changes. 5 change blocks. | ||||
23 lines changed or deleted | 17 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |