以下に興味があります。
never base 64エンコード文字列の一部として発生する文字のリストはありますか?
たとえば*
。これが起こるかどうかはわかりません。元の入力に実際にその一部として*
が含まれていた場合、それは異なる方法でエンコードされますか?
ここに私が見つけることができるものがあります: 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エンコーディングにneverが現れるべき文字に一致する正規表現は次のようになります。
[^A-Za-z0-9+/=]
ただし、kapepsの回答が指摘しているように、これは推奨事項にすぎません。特定の実装では、異なる64文字のセットを選択する場合があります。 (実際、リンクされたRFCでも、URL 62と63をそれぞれ-
と_
に置き換えるURLとファイル名の安全なエンコーディングの代替テーブルが含まれています)。エンコードを作成した実装に本当に依存していると思います。
ほとんどの場合、他の回答でもおそらく安全ですが、 Base64に関するウィキペディアの記事 によると、信頼できる明確なリストはありません:
ベースに必要な64文字に選択された特定の文字セットの選択は、実装によって異なります。
RFC 4648 は、 "URLおよびFilename safe" Base 64 Alphabetなどの他のアルファベットに言及します。ここで、+
および/
は-
および_
に置き換えられます。
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 == "