Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基64编码的有效字符范围_Java_Regex_Base64_Apache Commons - Fatal编程技术网

Java 基64编码的有效字符范围

Java 基64编码的有效字符范围,java,regex,base64,apache-commons,Java,Regex,Base64,Apache Commons,我对以下内容感兴趣: 是否有一个字符列表,永远不会作为base 64编码字符串的一部分出现? 例如*。我不确定这是否会发生。如果原始输入实际上有*作为它的一部分,那么编码会有所不同吗?Base64只包含A-Z,A-Z,0-9,+,/和=/code>。 所以不使用的字符列表是:所有可能的字符减去上面提到的字符 出于特殊目的,也可以使用和\ 以下是我能找到的: 它包括以下方便的表格: Table 1: The Base 64 Alphabet Value En

我对以下内容感兴趣:
是否有一个字符列表,永远不会作为base 64编码字符串的一部分出现?

例如
*
。我不确定这是否会发生。如果原始输入实际上有
*
作为它的一部分,那么编码会有所不同吗?

Base64只包含
A-Z
A-Z
0-9
+
/
=/code>。
所以不使用的字符列表是:所有可能的字符减去上面提到的字符


出于特殊目的,也可以使用
\

以下是我能找到的:

它包括以下方便的表格:

                  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+/=]

然而,正如卡佩斯的回答所指出的,这只是建议。特定的实现可能会选择一组不同的64个字符。(事实上,即使链接的RFC也包含URL和文件名安全编码的替代表,分别用
-
-
替换字符62和63)。因此,我想这确实取决于创建编码的实现。

在大多数情况下,您可能对其他答案是安全的,但根据以下情况,您不应该有一个确定的列表:

为基础所需的64个字符选择的字符集的具体选择因实现而异

提到其他字母表,如“URL和文件名安全”基本64字母表,其中
+
/
替换为
-

有一种使用不同字符的方法。 请记住,关于行分隔符有一些特定于实现的规则,您可以在同一个表中找到这些规则。有些实现甚至允许(并忽略)字母表中没有的字符。

MIME的Base64实现对前62个值使用A–Z、A–Z和0–9

因此,在大多数情况下,您应该只使用字母数字字符。本文中的示例表还显示了“+”和“-”;你不太可能看到“*”


例如,您可以使用转换为Base64,对于“*”这将返回“Kg==”

我将查看此页面来计算它。将输入中的
*
表示为输出中的
*
的概念是奇怪的,表明对输入与输出之间的关系存在严重的概念混淆。当且仅当
*
是基本64字符集的成员时,输出中可能会出现
*
。。。无论输入内容是什么。
/
作为标准的一部分意味着不能将其用于命名文件。另外,为什么不在
A
之前先从
0
开始呢?为什么要故意使基本系统中的前十个数字不同?我不能回答你的第二个问题,但RFC提供了一种替代编码,它不使用
/
+
,专门设计用于文件名和URL的安全性。@Martineder顺便说一句,更合适的正则表达式是
^[a-Za-z0-9+/]+={0,2}$
。是否有任何python函数可以返回编码的值?例如,base64('A')=0,base64('O')=14