我对以下内容感兴趣:
是否有一个永远不会作为 base 64 编码字符串的一部分出现的字符列表?
例如*
. 我不确定这是否会发生。如果原始输入实际上*
是其中的一部分,那么它的编码方式会有所不同吗?
4 回答
这是我可以找到的:RFC 4648
它包括这个方便的表:
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
因此,匹配任何不应出现在 Base 64 编码中的字符的正则表达式将是:
[^A-Za-z0-9+/=]
但是,正如 kapeps 回答指出的那样,这只是建议。具体实现可能会选择不同的 64 个字符集。(事实上,即使是链接的 RFC 也包含一个用于 URL 和文件名安全编码的替代表,它将字符 62 和 63 分别替换为-
and _
)。所以我想这真的取决于创建编码的实现。
在大多数情况下,其他答案可能是安全的,但根据关于 Base64 的维基百科文章,不应该有一个可以依赖的明确列表:
为基本所需的 64 个字符选择的字符集的特定选择因实现而异。
RFC 4648提到了其他字母,例如“URL 和文件名安全”Base 64 Alphabet,其中+
和/
被替换为-
and _
。
有一张使用不同字符的 Base64 变体表。请记住,有关于行分隔符的实现特定规则,您可以在同一张表中找到这些规则。像Mime这样的一些实现甚至允许(并忽略)不在字母表中的字符。
Base64 只包含A–Z
, a–z
, 0–9
, +
,/
和=
. 所以不使用的字符列表是:所有可能的字符减去上面提到的字符。
出于特殊目的.
,_
也是可能的。
https://en.wikipedia.org/wiki/Base64#Design
MIME 的 Base64 实现对前 62 个值使用 A–Z、a–z 和 0–9
因此,在大多数情况下,您应该只期待字母数字字符。本文中的示例表还显示了“+”和“-”;您不太可能看到“*”。
例如,您可以使用http://www.motobit.com/util/base64-decoder-encoder.asp转换为 Base64,对于 '*' 这将返回 "Kg=="