質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Q&A

解決済

4回答

10256閲覧

なぜBase64では=で文字埋めするのですか?

widget11

総合スコア221

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

4グッド

4クリップ

投稿2019/06/25 08:04

base64で例えばteratailという文字列を変換するとdGVyYXRhaWw=
という文字列に変換できると思います。

この最後のイコールは変換後の文字列を4文字ずつ処理し4文字に満たなけれな付け加えるというルールというのは分かるのですが
そもそも何故こういうルールがあるかが分かりません。

base64は電子メール等で添付ファイルは画像等そのまま扱えない為バイナリ化、文字列化するということで使われたりしているということですが、別にイコールをわざわざ付け加えなくても扱えるのではないかと感じました。
=を付け加えなければならない理由が分かる方はいらっしゃいますでしょうか?よろしくお願い致します。

DrqYuto, GenbuHase, yohhoy, shinji709👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

https://tools.ietf.org/html/rfc4648

3.2. Padding of Encoded Data

In some circumstances, the use of padding ("=") in base-encoded data

is not required or used. In the general case, when assumptions about
the size of transported data cannot be made, padding is required to
yield correct decoded data.

必ずしも必要とは言えないが、一般的なケースとして、転送されるデータサイズが予想できない場合に正しいデコードを行うために必要となる。とのことです。

送られてきた文字列を4文字ずつで区切ってみたら最後が3文字だった、というときに転送したデータが欠けていたのか、残りをパディングで埋めて読み込んで良いのかわからない、ということですね。
パディングがあって4文字でピッタリ終わっていれば迷うことはないはずです。

投稿2019/06/25 08:24

編集2019/06/25 08:27
mather

総合スコア6759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Base64ってのは、バイナリに変換する際には、4文字もってきて3バイトに変換する、という処理を行いますんで、この元文字列の最後が4文字に満たない場合に余計な処理を付け加える必要があり、そうならないように4文字単位としているのでしょう
まあ、デコードする側で文字追加する、というテも取れますが、とりあえずそう決まっている、ということでどうでしょうか。

投稿2019/06/25 08:17

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/06/25 08:36

んで、Base64というのは暗号化するために行うもんじゃありません
guest

0

6ビットにわけ、4文字ずつ処理するからです
詳細はwikipediaを参照してください

投稿2019/06/25 08:18

yambejp

総合スコア116443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Wikipediaより

Base64変換の手順を以下に挙げる。

元データを6ビットずつに分割。(6ビットに満たない分は0を追加して6ビットにする)
各6ビットの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)

「4文字1単位として扱っているから」で説明がつくと思います。

投稿2019/06/25 08:14

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問