Jak używać
- Wklej ciąg do sprawdzenia w polu wejściowym.
- Odczytaj werdykt: prawidłowy lub nieprawidłowy, wykryty wariant (standardowy lub bezpieczny dla URL) oraz rozmiar po dekodowaniu.
- Jeśli pojawi się lista problemów, na podstawie podanych pozycji odszukaj nieprawidłowe znaki, białe znaki lub źle umieszczone dopełnienie.
- Sprawdź wykryty typ zawartości, aby dowiedzieć się, czy dane są tekstem, czy plikiem, np. PNG, PDF lub ZIP.
Kiedy Base64 jest prawidłowy
- Alfabet. Dozwolone są tylko
A-Z,a-z,0-9i dwa dodatkowe znaki:+i/w standardowym Base64 lub-i_w Base64URL. Ciąg, w którym występują obie pary, zwykle został uszkodzony albo złożony z dwóch różnych źródeł. - Dopełnienie. Znak
=może występować tylko na końcu i najwyżej dwa razy. Dopełnienie w środku zwykle oznacza, że połączono dwie zakodowane wartości. - Długość. Przy dopełnieniu długość jest wielokrotnością 4. Bez dopełnienia dopuszczalna jest każda długość oprócz 4n + 1: jeden pozostały znak przenosi tylko 6 bitów, czyli za mało na bajt.
Ścisłe dekodery stosują jeszcze jedną regułę: nieużywane najmniej znaczące bity ostatniego znaku muszą być zerami. Wiele dekoderów ignoruje te bity, ale niektóre, np. base64.StdEncoding.Strict() w Go, odrzucają taki ciąg.
Typowe błędy i sposoby ich naprawy
| Problem | Typowa przyczyna | Rozwiązanie |
|---|---|---|
| Nieprawidłowy znak | Cudzysłowy, ukośniki wsteczne lub sekwencje %2B i %3D skopiowane razem z wartością | Usuń zbędne znaki lub najpierw zdekoduj ciąg z kodowania URL |
| Spacje w środku | Znaki + zamienione na spacje, gdy wartość przeszła przez URL lub formularz | Przywróć znaki + lub używaj Base64URL w adresach URL |
| Długość 4n + 1 | Wartość obcięta przez limit długości kolumny, wiersz logu lub niepełne kopiowanie | Skopiuj ponownie całą wartość |
| Dopełnienie w środku | Dwa połączone ze sobą ciągi Base64 | Rozdziel je i zdekoduj każdą część osobno |
| Podziały wierszy | Zawijanie wierszy MIME lub PEM | Zwykle nieszkodliwe; usuń je tam, gdzie wymagany jest jeden wiersz |
Prawidłowy nie znaczy sensowny
Base64 nie ma nagłówka ani sumy kontrolnej, więc poprawność oznacza jedynie, że ciąg da się zdekodować. Test ten przechodzi wiele zwykłych słów: dowolne cztery litery tworzą prawidłową grupę. Dlatego walidator dodatkowo dekoduje dane i podaje ich rozmiar oraz typ zawartości. Czytelny tekst lub znana sygnatura pliku, np. PNG, PDF lub ZIP, to mocna przesłanka, że ciąg rzeczywiście jest zakodowany w Base64; garść losowych bajtów już nie. Aby sprawdzić także inne kodowania, wypróbuj wykrywacz kodowania.
Walidacja Base64 w kodzie
// JavaScript: standardowy Base64 z dopełnieniem (pasuje też do pustego ciągu)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: zgłoś błąd zamiast pomijać nieprawidłowe znaki
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
Najczęściej zadawane pytania
Dlaczego zwykłe słowo jest uznawane za prawidłowy Base64?
test daje po zdekodowaniu trzy bajty. Sprawdź wykryty typ zawartości: jeśli wynik nie jest ani czytelnym tekstem, ani znanym typem pliku, dane wejściowe najprawdopodobniej nigdy nie były zakodowane w Base64.Czy Base64 ze spacjami lub podziałami wierszy jest prawidłowy?
MIME i PEM dzielą Base64 na wiersze, a większość dekoderów pomija białe znaki. Pola JSON, nagłówki HTTP, tokeny JWT i data URI oczekują jednak jednego nieprzerwanego ciągu. Walidator wymienia białe znaki osobno, aby można było ocenić, czy mają one znaczenie tam, gdzie ciąg zostanie użyty.
Czy Base64 bez dopełnienia = jest prawidłowy?
=, aż długość będzie wielokrotnością 4. Ciągi bez dopełnienia o długości 4n + 1 znaków nigdy nie są prawidłowe.Jak sprawdzić w JavaScripcie, czy ciąg jest zakodowany w Base64?
atob() w bloku try/catch. Warto pamiętać, że atob() zgłasza wyjątek InvalidCharacterError dla błędnych danych, ale bez ostrzeżenia akceptuje białe znaki i brak dopełnienia, a przy tym nie przyjmuje znaków z wariantu bezpiecznego dla URL.