web-dev-qa-db-ja.com

Base 64エンコーディングの有効な文字の範囲

以下に興味があります。
never base 64エンコード文字列の一部として発生する文字のリストはありますか?
たとえば*。これが起こるかどうかはわかりません。元の入力に実際にその一部として*が含まれていた場合、それは異なる方法でエンコードされますか?

42
Jim

ここに私が見つけることができるものがあります: 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とファイル名の安全なエンコーディングの代替テーブルが含まれています)。エンコードを作成した実装に本当に依存していると思います。

84
Martin Ender

ほとんどの場合、他の回答でもおそらく安全ですが、 Base64に関するウィキペディアの記事 によると、信頼できる明確なリストはありません:

ベースに必要な64文字に選択された特定の文字セットの選択は、実装によって異なります。

RFC 4648 は、 "URLおよびFilename safe" Base 64 Alphabetなどの他のアルファベットに言及します。ここで、+および/-および_に置き換えられます。

Base64バリアントのテーブル があり、異なる文字を使用しています。同じ表にある行区切り記号に関する実装固有のルールがあることに注意してください。 Mime などの一部の実装では、アルファベット以外の文字も許可(および無視)します。

15
kapex

Base64には、A–Za–z0–9+/、および=のみが含まれます。したがって、使用しない文字のリストは、すべての可能な文字から上記の文字を引いたものです。

特別な目的のために、._も使用できます。

9
jlordo

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 == "

2
robert