bitlvl
RU

Шпаргалка по Base64 и кодировкам

Всё о Base64, что стоит искать в справочнике, включая однострочники для каждого языка.

Помещается на одну вертикальную страницу A4 / Letter; выберите «Сохранить как PDF» в диалоге печати, чтобы оставить себе копию.

Алфавит (значение → символ)

0 A1 B2 C3 D4 E5 F6 G7 H
8 I9 J10 K11 L12 M13 N14 O15 P
16 Q17 R18 S19 T20 U21 V22 W23 X
24 Y25 Z26 a27 b28 c29 d30 e31 f
32 g33 h34 i35 j36 k37 l38 m39 n
40 o41 p42 q43 r44 s45 t46 u47 v
48 w49 x50 y51 z52 053 154 255 3
56 457 558 659 760 861 962 +63 /

URL-safe (RFC 4648 §5): 62 = -, 63 = _, обычно без дополнения. Символ дополнения: =.

Как это работает

байты:  01001000 01101001 00100001     "Hi!"
6-бит:  010010 000110 100100 100001
символы:  S      G      k      h       "SGkh"
"Hi"  → 01001000 01101001 (16 бит) → 010010 000110 1001(00) → "SGk" + "="
"H"   → 8 бит → 010010 00(0000)         → "SA"  + "=="
Длина входа mod 3 = 0без дополнения
= 12 символа + ==
= 23 символа + =
Размер вывода⌈n / 3⌉ × 4 (≈ +33 %)
Размер входа по выводуlen × 3 / 4 − дополнение
MIME (RFC 2045)строки по 76 символов, CRLF
PEMстроки по 64 символа

Варианты

Base64A–Z a–z 0–9 + /; email, JSON, data: URL
Base64URL- и _ вместо + /; JWT, OAuth, имена файлов
Base32A–Z 2–7; секреты TOTP, без учёта регистра, +60 %
Base32hex0–9 A–V; сортируется численно (DNSSEC NSEC3)
Hex (Base16)0–9 a–f; +100 %, тривиально читается
Base58без 0 O I l; адреса Bitcoin
Base85 / Ascii85+25 %; PDF, бинарные diff в git
bcrypt base64./A–Z a–z 0–9, другой порядок; только внутри хешей bcrypt

Команды

base64 file; base64 -dGNU coreutils (-w0 без переноса строк)
openssl base64 -AOpenSSL (-A = одна строка)
echo -n 'text' | base64-n: без завершающего перевода строки во входе
base64.b64encode(b), b64decode(s)Python; urlsafe_b64encode для URL-safe
btoa(s), atob(s)JS, только строки Latin-1; для UTF-8 используйте TextEncoder + fromCharCode или Buffer в Node
Buffer.from(s).toString('base64'); Buffer.from(b64, 'base64')Node.js (также 'base64url')
base64.StdEncoding.EncodeToString(b)Go; RawURLEncoding для URL-safe без дополнения
base64_encode(), base64_decode()PHP
Base64.strict_encode64(s)Ruby (encode64 переносит строки)
[Convert]::ToBase64String($bytes)PowerShell
SELECT TO_BASE64('x'); encode('x','base64')MySQL; PostgreSQL

Помните

  • Base64 — не шифрование; декодировать может кто угодно.
  • Ошибки декодирования — обычно отсутствующий =, URL-safe строка, поданная строгому декодеру, или переносы строк.
  • Текст сначала должен стать байтами: выберите UTF-8 и укажите это явно.
  • data: URL имеет вид data:<mime>;base64,<data>.

Результаты и сообщения этого инструмента выводятся на английском языке.

Вопросы

Где кодировать или декодировать?

Инструмент Base64 обрабатывает текст и файлы в обе стороны, включая URL-safe и ввод без дополнения, и показывает декодированные байты в hex.