回 1-6 道 1 数と論理と計算量
Base64 とは、
読み終えたらBase64 で
この頁の流れ
データを
なぜ Base64 が要るのか
Base64 が
Web のdata:image/png;base64, に
手が
メールの
Base64 は どう 書き直すのか
Base64 は、
64 字の表
6 ビットは
| 値 | 字 |
|---|---|
| 0〜25 | A〜Z |
| 26〜51 | a〜z |
| 52〜61 | 0〜9 |
| 62 | + |
| 63 | / |
3 バイトを 4 字に
1 バイトは
| 束 | ビットの数 | 数え方 |
|---|---|---|
| 入る側 | 24 | 8 ビット × 3 バイト |
| 出る側 | 24 | 6 ビット × 4 字 |
文字列の
余りは = で詰める
バイト列の
| 最後の束 | 出る字 | = の数 |
|---|---|---|
| 3 バイト | 4 字 | 0 |
| 2 バイト | 3 字 + = | 1 |
| 1 バイト | 2 字 + == | 2 |
= の
長さが 約 4/3 になる理由
3 バイトが
URL と ファイルの 名前に使う版
標準の
動かして確かめる
Man の
動かす Man を 6 ビットずつに切る
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
010011010110000101101110
010011 19 T
010110 22 W
000101 5 F
101110 46 u
TWFu24 ビットを
次に、base64 で、
動かす 長さごとの = の数
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1 4 Zg==
2 4 Zm8=
3 4 Zm9v
4 8 Zm9vYg==
5 8 Zm9vYmE=
6 8 Zm9vYmFy1 バイトでも
日本語も、
動かす 日本語を Base64 にして戻す
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
e3 81 82
b'44GC'
あ
12 b'44KG44KB44GV44GP'「あ」のb64decode で
最後に、
動かす 長さは約 4/3 になる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1 4 4 4.0
2 4 4 2.0
3 4 4 1.333
4 8 8 2.0
100 136 136 1.36
1000 1336 1336 1.336どの
Base64 を 使うと どこで 崩れるのか
Base64 は
誰でも 元に戻せる
Base64 には
動かす Base64 は誰でも戻せる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
dXNlcjpwYXNzMTIzNA==
b'user:pass1234'見た目は
URL の 中の + は 空白に化ける
標準の
動かす URL の中の + と /
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
+/+/ -_-_
' / /' False
TrueFB FF BF の
1 字の 化けは、 黙って 別の データになる
Base64 の
動かす 1 字の化けは気づけない
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
b'aGVsbG8=' b'bGVsbG8='
b'lello'
b'hello'
907060870
3280994374頭の
壊れに
崩れる
- 字が
読めなければ 中身は 守られる、という 前提。 Base64 は 鍵無しで 誰でも戻せる - 英数字なら
URL に そのまま 入る、という 前提。 + と / は URL で 別の 意味になる - 戻せたなら
中身は 正しい、という 前提。 1 字の 化けは 黙って 別の データになる
仕事で どう 確かめるか
仕事では、
1 つ目は、b64decode(b64encode(x)) == x を
2 つ目は、
3 つ目は、
関わる実例
Base64 を
IBM WebSphere の 設定の 書き出し CVE-2003-1447 (NVD の 公開 2003 年 12 月 31 日)
米国の
崩れた
よくある問い
なぜ Base64 という 名前なのですか
64 種類の
Base64 は 危険ですか
Base64 で
Base64 と Base64URL の 違いは何ですか
違うのは
JavaScript では どう 変換しますか
ブラウザのbtoa でatob でbtoa はTextEncoder で
ファイルを Base64 に するには どうしますか
ファイルをopen(名前, "rb") でbase64.b64encode にbase64 という
確認クイズ
答えだと
1 問目
3 バイトの
2 問目
この
fo を Base64 に
import base64
print(base64.b64encode(b"fo"))3 問目
Base64 に
4 問目
Base64 で
説明課題
次の
- Base64 で
長さが 約 4/3 に なる 理由を、 ビットの数で - Base64 で
秘密を 守れない理由
自分の
この回の 先の一歩
画像の
もっと深く
この
一次資料
どれも
- RFC 4648 The Base16, Base32, and Base64 Data Encodings (IETF、
2006年10月、英語)。64 字の 表と = の 詰め物、 24 ビットを 6 ビット 4 つに 分ける こと、 5 節の URL 用の 版、 10 節の 試験の 値、 12 節の 注意 (計算の 上での 秘密を 守らない こと、 詰め物の 余りの ビットが 比べを すり抜ける 元に なること) - RFC 2045 MIME Part One (IETF、英語)。6.8 節で
Base64 の 行を 76 字まで と定めること - RFC 7617 The 'Basic' HTTP Authentication Scheme (IETF、
2015年9月、英語)。名前と パスワードを コロンで つないで Base64 に する こと、 平文と 同じであること - base64 Base16, Base32, Base64, Base85 Data Encodings (Python 公式文書、英語)。
b64encode、b64decode、urlsafe_b64encodeが+ と / を - と _ に 替えること - urllib.parse Parse URLs into components (Python 公式文書、英語)。問い
合わせを 読むとき + を 空白に 替えること - data URLs (MDN Web Docs、英語)。
;base64を付けると Base64 で 書いた バイト列を 頁に 埋め込めること - Window btoa() method (MDN Web Docs、英語)。1 バイトに
収まらない 字で InvalidCharacterError が出ること - Secrets (Kubernetes 公式文書、英語)。Secret が
既定では 暗号化されずに 保存されること - RFC 7515 JSON Web Signature (IETF、英語)。JWT などで
使う Base64URL では、 末尾の = を省くこと - zlib Compression compatible with gzip (Python 公式文書、英語)。
crc32がデータの CRC32 の チェックサムを 計算すること - CVE-2003-1447 (米国 NIST の
NVD、英語)。IBM WebSphere Advanced Server Edition 4.0.4 が XOR と Base64 で パスワードを 守っていて、 書き出した ファイルから 戻せたこと
次へ
道 1 数と論理と計算量の回
- 1-12 進数と
16 進数桁の 重み、 変換、 表せる範囲頁で読む - 1-2文字コードと文字化けUnicode、
UTF-8、 Shift_JIS、BOM頁で読む - 1-3計算量を数えるBig-O、
ループの回数頁で読む - 1-4論理と真理値表AND、
OR、 NOT、 ド・モルガン準備中 - 1-5リトルエンディアンと
ビッグエンディアンバイトの 並び順、 ネットワーク、ファイル頁で読む - 1-6Base64 の仕組み64 字の
表、 = の 詰め物、 長さ 4/3この回 - 1-7情報量と
ハフマン符号化ビット、 確からしさ、圧縮頁で読む - 1-8チューリングマシンと停止問題テープ、
状態、 計算できない問題頁で読む
