UltKit

Base64 — kodowanie i dekodowanie

Zamień tekst lub plik na Base64 albo odkoduj Base64 z powrotem do czytelnego tekstu. Znaki Unicode są obsługiwane poprawnie, alfabet URL-safe włącza się jednym kliknięciem, a dekodowanie przyjmuje oba alfabety, z dopełnieniem lub bez niego.

Tryb

Znaki: 0 · słowa: 0 · wiersze: 0

Znaki: 0 · słowa: 0 · wiersze: 0

Działa w całości w tej karcie przeglądarki. Twój tekst nie jest wysyłany ani zapisywany.

Alfabet Base64

Indeks → znak według RFC 4648. Dwa ostatnie wyróżnione znaki różnią się w wersji bezpiecznej dla URL: 62 to + lub -, 63 to / lub _.

  1. 0A
  2. 1B
  3. 2C
  4. 3D
  5. 4E
  6. 5F
  7. 6G
  8. 7H
  9. 8I
  10. 9J
  11. 10K
  12. 11L
  13. 12M
  14. 13N
  15. 14O
  16. 15P
  17. 16Q
  18. 17R
  19. 18S
  20. 19T
  21. 20U
  22. 21V
  23. 22W
  24. 23X
  25. 24Y
  26. 25Z
  27. 26a
  28. 27b
  29. 28c
  30. 29d
  31. 30e
  32. 31f
  33. 32g
  34. 33h
  35. 34i
  36. 35j
  37. 36k
  38. 37l
  39. 38m
  40. 39n
  41. 40o
  42. 41p
  43. 42q
  44. 43r
  45. 44s
  46. 45t
  47. 46u
  48. 47v
  49. 48w
  50. 49x
  51. 50y
  52. 51z
  53. 520
  54. 531
  55. 542
  56. 553
  57. 564
  58. 575
  59. 586
  60. 597
  61. 608
  62. 619
  63. 62+ -
  64. 63/ _

Jak długi jest wynik

Każde 3 bajty danych dają 4 znaki; ostatnia grupa 1 lub 2 bajtów jest dopełniana znakiem = w standardowym Base64 i pozostaje bez dopełnienia w wersji bezpiecznej dla URL.

Dane wejścioweBajtyStandardowyBezpieczny dla URLDługość
U1VQ==VQ4
Ul2VWw=VWw4
Ult3VWx0VWx04
UltK4VWx0Sw==VWx0Sw8
UltKi5VWx0S2k=VWx0S2k8
UltKit6VWx0S2l0VWx0S2l08

Do czego służy Base64

Base64, zdefiniowany w RFC 4648, zapisuje dowolne bajty za pomocą 64 drukowalnych znaków ASCII: A–Z, a–z, 0–9, + i /. Każda grupa trzech bajtów (24 bity) jest dzielona na cztery liczby 6-bitowe, a każda z nich wskazuje jeden znak alfabetu. Gdy długość danych nie jest wielokrotnością trzech, ostatnia grupa jest dopełniana jednym lub dwoma znakami =. Wynik jest zawsze o około 33% większy od danych wejściowych: 4 znaki na każde 3 bajty.

Base64 istnieje, ponieważ wiele kanałów zaprojektowano z myślą o tekście. E-mail (MIME), adresy data: w HTML i CSS, pola JSON przenoszące obrazy lub certyfikaty oraz nagłówki uwierzytelniania HTTP Basic używają Base64 do bezpiecznego przesyłania danych binarnych. To nie jest szyfrowanie i niczego nie ukrywa; do dekodowania nie potrzeba klucza.

Unicode i wariant URL-safe

Base64 koduje bajty, a nie litery, więc tekst trzeba najpierw zamienić na bajty. To narzędzie zawsze używa UTF-8, czyli kodowania, na którym działa internet: „é” zajmuje dwa bajty, a emoji cztery. Wbudowana w przeglądarkę funkcja btoa sama zgłasza błąd przy każdym znaku powyżej U+00FF, dlatego proste kodery zawodzą przy polskich znakach i emoji; tutaj tekst przechodzi najpierw przez TextEncoder, a dekodowanie odwraca to za pomocą TextDecoder. Jeśli zdekodowane bajty nie są poprawnym UTF-8 (obraz, plik zip), narzędzie pokazuje je szesnastkowo zamiast nieczytelnego tekstu.

Standardowy Base64 używa znaków + i /, które mają znaczenie w adresach URL i nazwach plików. Alfabet bezpieczny dla URL z sekcji 5 RFC 4648 zastępuje je znakami - i _, a dopełnienie zwykle się pomija. Dokładnie ta postać jest używana w JSON Web Tokens. Dekoder akceptuje oba alfabety oraz brak dopełnienia, więc możesz wkleić dowolną wersję.

Kodowanie plików i obrazów

Wybierz plik, a narzędzie odczyta go lokalnie za pomocą FileReader i zwróci jego Base64 albo kompletny adres data: z typem MIME pliku, gotowy do wklejenia w znacznik img lub tło CSS. Obrazy wstawiane bezpośrednio oszczędzają jedno żądanie HTTP, ale rosną o jedną trzecią i nie mogą być osobno buforowane, więc nadają się do małych ikon, a nie do zdjęć. Do obrazów z podglądem i gotowymi fragmentami HTML i CSS użyj narzędzia Obraz do Base64.

Najczęściej zadawane pytania

Dlaczego wynik w Base64 jest dłuższy niż dane wejściowe?
Każde 3 bajty zamieniają się w 4 znaki, więc wynik ma około 4/3 rozmiaru danych wejściowych plus do dwóch znaków dopełnienia. Tekst spoza ASCII jest jeszcze dłuższy, bo UTF-8 używa od dwóch do czterech bajtów na znak.
Co oznaczają znaki = na końcu?
To dopełnienie. Dzięki niemu długość wyniku jest wielokrotnością czterech, gdy długość danych nie jest wielokrotnością trzech. Jeden znak = oznacza, że ostatnia grupa miała dwa bajty, dwa znaki = oznaczają, że miała jeden bajt.
Dlaczego dekodowanie kończy się błędem nieprawidłowego znaku?
Dane wejściowe zawierają coś spoza alfabetu, na przykład spację w środku wyrazu, cudzysłów albo znak % z kodowania URL. Podziały wierszy i brak dopełnienia są tolerowane; inne znaki nie.
Czy kodowanie hasła w Base64 jest bezpieczne?
Base64 nie zapewnia żadnej ochrony. Uwierzytelnianie HTTP Basic wysyła user:password w Base64, dlatego wolno go używać wyłącznie przez HTTPS. Do ochrony sekretów użyj prawdziwego szyfrowania lub haszowania.
Czym różni się Base64 od Base64url?
Tylko dwa znaki i dopełnienie: Base64url używa - i _ zamiast + i / oraz zwykle pomija =, dzięki czemu wynik może znaleźć się w adresach URL i nazwach plików bez znaków ucieczki.