Base 64符号化の概要

5901 ワード

前言


まずWikiでBase 64の紹介を見てみましょう.
Base 64は、64個の印刷可能文字に基づいてバイナリデータを表す表現方法である.
2の6乗が64に等しいため、6ビットごとに1つのユニットであり、印刷可能な文字に対応する.3バイトには24ビットがあり、4つのBase 64ユニットに対応している.すなわち、3バイトは4つの印刷可能な文字で表す必要がある.Eメールの送信コードとして使用できます.Base 64における印刷可能文字には、62文字のアルファベットA−Z、a−z、0−9の数字が含まれ、他の2つの印刷可能記号は異なるシステムで異なる.uuencodeのようないくつかの他の符号化方法、およびその後のbinhexのバージョンは、6つのバイナリ数字を表すために異なる64文字セットを使用するが、Base 64とは呼ばない.

コーディングプロセス


プロセスは次のとおりです.
1.base 64の符号化はすべて文字列の長さによって、3つの8 bitの文字ごとに1組である
2.次に各グループについて、まず各文字のASCII符号化を取得する
3.その後、ASCII符号化を8 bitのバイナリに変換し、3*8=24 bitのバイトセットを得る
4.その後、この24 bitを4つの6 bitのバイトに分割し、各6 bitのバイトの前に2つの上位0を記入し、4つの8 bitのバイトを得る
5.その後、この4つの8 bitのバイトを10進数に変換し、Base 64符号表(下表)と照合して、対応する符号化後の文字を得る.
次の点に注意してください.
1.符号化された文字は8 bitであることが要求されるので、ASCII符号化の範囲内でなければならない.
2.符号化文字長が3の倍数でない場合は、いずれも0で代用し、対応する出力文字は=
MIME形式の電子メールにおいて、base 64は、binaryのバイトシーケンスデータをASCII文字シーケンスからなるテキストに符号化するために使用することができる.使用時には、伝送符号化方式でbase 64を指定します.使用する文字には、大文字と小文字の各26文字、10文字の数字、プラス記号「+」、スラッシュ「/」の合計64文字、等号「=」が接尾辞として使用されます.
Base 64インデックステーブル:
Value
Char
 
Value
Char
 
Value
Char
 
Value
Char
0
A
16
Q
32
g
48
w
1
B
17
R
33
h
49
x
2
C
18
S
34
i
50
y
3
D
19
T
35
j
51
z
4
E
20
U
36
k
52
0
5
F
21
V
37
l
53
1
6
G
22
W
38
m
54
2
7
H
23
X
39
n
55
3
8
I
24
Y
40
o
56
4
9
J
25
Z
41
p
57
5
10
K
26
a
42
q
58
6
11
L
27
b
43
r
59
7
12
M
28
c
44
s
60
8
13
N
29
d
45
t
61
9
14
O
30
e
46
u
62
+
15
P
31
f
47
v
63
/

≪インスタンス|Instance|emdw≫


ここでは,文字長が3で割り切れるものと3で割り切れないものの2つの例を挙げる.
1)文字長が3で割り切れる場合:例えば「トム」
            T                   o                 m
ASCII:      84               111             109
8bit :   01010100    01101111    01101101
6bit :     010101      000110      111101      101101
 :       21             6               61              45
 :     V             G               9                t  

だからTomはbase 64符号化を経てVG 9 tになる
2)文字長は3では割り切れない、例えば「ルーシー」
              L                      u           c           y
ASCII:      76                   117        99          121
8bit :   01001100    01110101    01100011    01111001      00000000    00000000
6bit :     010011      000111      010101      100011      011110  010000  000000  000000
 :        19             7               21             35             30        16          ( )    ( )      
 :     T              H               V                j               e         Q            =          =
Lucyはアルファベットが4文字しかないので、3つを1組押すと2組目に空席が2つあるので、0で揃える必要があります.ここで注意が必要なのは、補完が必要で出現する0であるため、10進法に変換する際に従来通りbase 64符号表で対応することはできないので、aではなく特殊な「異常」と理解でき、符号化は「=」に対応すべきである.

その他


1.MIME以外の他の規格
ただし、標準のBase 64は、URLエンコーダが標準Base 64の"/"と"+"の文字を"%XX"のような形にするため、URLに直接転送するのに適していません.これらの"%"番号は、ANSI SQLでワイルドカードとして使用されているため、データベースに格納する際に変換する必要があります.
この問題を解決するために、URLのための改良されたBase 64符号化を採用することができ、最後に'='番号を入力せず、標準Base 64の「+」と「/」をそれぞれ「*」と「-」に変更することで、URL符号化とデータベース記憶時に行う変換を回避し、符号化情報の長さのこの過程での増加を回避し、データベース、フォームなどのオブジェクト識別子のフォーマットを統一することができる.
正規表現に使用されるもう1つの改良Base 64変種は、「+」および「/」を「!「+」,「*」および前述のIRCuで使用された「[」および「]」は、正規表現において特別な意味を有する可能性があるため、「-」が用いられる.
「+/」を「-」または「.」に変更する変種もあります.(プログラミング言語の識別子名として使用される)または「.-」(XMLのNmtokenに使用される)または「:」(XMLのNameに使用される)のいずれかです.