基于字符串的数据编码:Base64与Base64url

问题描述 投票:1回答:1

我在JSON web令牌之类的东西中看到了Base64和Base64url有什么区别?

url base64 base64url
1个回答
4
投票

Base64和Base64url都是以字符串形式编码二进制数据的方法。你可以阅读base64 here的理论。 Base64的问题在于它包含字符+/=,它们在某些文件系统名称和URL中具有保留含义。所以base64url通过用+替换-/来解决这个问题。可以在不需要时删除尾随填充字符_,但在URL中它很可能是= URL编码。然后编码数据可以毫无问题地包含在URL中。

以下是差异图表:

%

下面我将引用标准中的定义。

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

4. Base 64编码

基础64的以下描述源自RCF 4648 specs,[4],[5]和[6]。该编码可以称为“base64”。

Base 64编码旨在表示允许使用大写和小写字母但不一定是人类可读的形式的任意八位字节序列。

使用65个字符的US-ASCII子集,使6位成为可能 代表每个可打印的字符。 (额外的第65个字符“=”用于表示特殊处理功能。)

编码过程表示24位输入位组作为4个编码字符的输出串。从左到右,通过连接3个8位输入组形成24位输入组。然后将这24个比特视为4个连接的6比特组,每个组被翻译成基本64字母表中的单个字符。

每个6位组用作64个可打印字符数组的索引。索引引用的字符放在 输出字符串。

3

如果在编码数据的末尾有少于24位可用,则执行特殊处理。完整的编码量子 总是在数量结束时完成。当输入少于24时 位在输入组中可用,添加值为零的位 (在右侧)形成一个整数6位组。填充 在数据的末尾使用'='字符执行。以来 所有base 64输入都是整数个八位字节,只有以下情况才会出现:

(1)编码输入的最终量是24位的整数倍;这里,编码输出的最后一个单位是4个字符的整数倍,没有“=”填充。

(2)编码输入的最终量正好是8位;这里,编码输出的最后一个单元是两个字符,后跟两个“=”填充字符。

(3)编码输入的最终量子正好是16位;这里,编码输出的最后一个单元是三个字符,后跟一个“=”填充字符。

5.使用URL和文件名安全字母表进行基本64编码

在[12]中使用了带有URL和文件名安全字母的Base 64编码。

已经建议使用“〜”作为第63个字符的替代字母表。由于“〜”字符在某些文件系统环境中具有特殊含义,因此建议使用本节中描述的编码。剩余的未保留URI字符是“。”,但某些文件系统环境不允许多个“。”。在文件名中,从而使“。”性格也没有吸引力。

当在URI [9]中使用时,填充字符“=”通常是百分比编码,但如果隐含地知道数据长度,则可以是 跳过填充物避免;见3.2节。

该编码可以称为“base64url”。这种编码 不应该被视为与“base64”编码相同 不应该只被称为“base64”。除非澄清 否则,“base64”指的是上一节中的基数64。

除了62:nd和63:rd字母字符外,此编码在技术上与前一个编码相同,如表2所示。

                  Table 1: The Base 64 Alphabet

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