base64
エンコードとは何かbase64
、C#でエンコードを計算する方法は知っていますが、文字列をbase64に変換する=
と、最後にがあることを何度か確認しました。
いくつかの質問が浮上しました:
- ない
base64
文字列は、常にで終わりますか=
? - なぜ
=
最後に追加されるのですか?
base64
エンコードとは何かbase64
、C#でエンコードを計算する方法は知っていますが、文字列をbase64に変換する=
と、最後にがあることを何度か確認しました。
いくつかの質問が浮上しました:
base64
文字列は、常にで終わりますか=
?=
最後に追加されるのですか?回答:
より完全な答えは、base64でエンコードされた文字列は常にで終わるわけではなく、適切な長さに文字列をパディングする必要がある場合に=
のみ、1または2で終わるということ=
です。
=
十分です。境界を見つけたい場合は、ターミネーターが常に存在している必要があります(必要な文字は1つだけです)。Base64のパディングコンセプト全体は単なる頭脳です...
base64
イラストや例を使って効率的にパディングすることを説明する、関連性のある信頼できるリンクが投稿されたことを願っています。ウィキペディアへの現在のリンクは、@ NHのように絶対に無関係です。言及した。
1-いいえ
2-短い回答として:65番目の文字( "="記号)は、メッセージのエンコードの最終プロセスでの補足としてのみ使用されます。
文字列が3文字の倍数の数値を持っている場合、「=」記号はありません。これは、Base64
エンコーディングがそれぞれ3バイト(8ビット)を取り、ASCII標準で4つの印刷可能な文字として表すためです。
詳細:
(a)エンコードしたい場合
ABCDEFG <=> [ ABC
] [ DEF
] [G
Base64
最初のブロックと2番目のブロック(完成したもの)を処理(4文字を生成)しますが、3番目のブロックでは、==
必要な4文字を完成させるために出力にdoubleを追加します。したがって 、結果は QUJD REVG Rwになります。 == (スペースなし)
(b)エンコードしたい場合...
ABCDEFGH <=> [ ABC
] [ DEF
] [GH
同様に、=
出力の最後に1つだけ追加して4文字を取得し、結果は QUJD REVG R0g = (スペースなし)になります。
等号(=)は、base64エンコーディングの特定の形式でパディングとして使用されます。Wikipediaの記事をbase64には、すべての詳細を持っています。
パディングです。http://en.wikipedia.org/wiki/Base64から:
理論的には、欠落バイト数はBase64の桁数から計算できるため、パディング文字はデコードに必要ありません。一部の実装では、パディング文字は必須ですが、他の実装では使用されません。パディング文字が必要となる1つのケースは、複数のBase64エンコードファイルを連結することです。
decode(encode(A)+encode(B))=A+B
、パディングは使用できますが、パディングは使用できません。
http://www.hcidata.info/base64.htm
「メアリー・ハッド」をBase 64にエンコード
この例では、単純なテキスト文字列( "Mary had")を使用していますが、データが何であっても(グラフィックファイルなど)原則は保持されます。入力データの各24ビットを32ビットの出力に変換するために、Base 64エンコーディングは24ビットを6ビットの4つのチャンクに分割します。私たちが最初に気づく問題は、「メアリーがいた」が3バイトの倍数ではなく、8バイトの長さであるということです。このため、最後のビットグループは4ビットのみです。これを修正するには、「0」のビットを2つ追加し、最後に「=」を置くことでこの事実を思い出します。Base 64に変換されるテキスト文字列が7バイト長の場合、最後のグループは2ビットでした。この場合、「0」の4つのビットを追加し、最後に「==」を置くことでこの事実を覚えています。