Jak używać
- Wklej ciąg szesnastkowy w polu „Wejście”. W polu „Z formatu” jest już wybrana opcja „Szesnastkowy (Base16)”, a w polu „Na format” – Base64.
- Nie trzeba przejmować się formatowaniem: spacje, podziały wierszy, dwukropki, łączniki oraz prefiksy 0x i \x są ignorowane.
- Jeśli wartość ma trafić do adresu URL, tokena JWT lub klucza JSON Web Key, zmień format docelowy na Base64URL.
- Skopiuj wynik w Base64.
Po co konwertować hex na Base64
Większość narzędzi do obliczania skrótów wyświetla je w hex, ale wiele protokołów oczekuje Base64, który jest o jedną trzecią krótszy. Typowe przypadki:
- Subresource Integrity. Atrybut
integrityskryptów i arkuszy stylów zawiera skrót w Base64, np.sha384-, po którym następują 64 znaki Base64. - Content Security Policy. Skróty zezwalające na wykonanie skryptów osadzonych w stronie zapisuje się jako
'sha256-...'z wartością w Base64. - Sumy kontrolne w interfejsach API HTTP. Nagłówek
Content-MD5i nagłówki sum kontrolnych Amazon S3 zawierają Base64 binarnego skrótu, a nie ciąg szesnastkowy wyświetlany przezmd5sum. - Zwięzłe identyfikatory. UUID ma 16 bajtów: to 32 cyfry szesnastkowe, ale tylko 22 znaki w Base64URL bez dopełnienia.
Obsługiwane formaty hex
Cyfry szesnastkowe nie rozróżniają wielkości liter. Przed dekodowaniem konwerter usuwa białe znaki, podziały wierszy, dwukropki, średniki, przecinki, łączniki oraz prefiksy 0x, \x, % i &#x. Obejmuje to odciski palców z OpenSSL w postaci AB:CD:EF, tablice w języku C w postaci 0x12, 0x34, ciągi ze znakami ucieczki w postaci \x12\x34, bajty w kodowaniu procentowym oraz identyfikatory UUID z łącznikami.
Po oczyszczeniu dane wejściowe muszą zawierać parzystą liczbę cyfr, po dwie na bajt. Nieparzysta liczba cyfr jest zgłaszana jako błąd i zwykle oznacza utratę wiodącego zera, np. abc zamiast 0abc.
Koduj bajty, a nie tekst szesnastkowy
Częstym błędem jest wklejanie skrótu szesnastkowego do zwykłego kodera tekstu na Base64. Koduje on wtedy znaki 0-9a-f zamiast bajtów, które one reprezentują, a wynik jest dwa razy dłuższy, niż powinien: 88 znaków dla skrótu SHA-256 zamiast 44. Wszystko, co oczekuje binarnego skrótu, np. atrybut SRI lub nagłówek sumy kontrolnej, odrzuci taką wartość. Ten konwerter najpierw dekoduje hex na bajty.
# Powłoka: skrót szesnastkowy na Base64
printf '%s' "$HEX" | xxd -r -p | base64
# Wartość SRI dla pliku w jednym kroku
openssl dgst -sha384 -binary script.js | openssl base64 -A
# Python
base64.b64encode(bytes.fromhex(h)).decode()
// Node.js (bez ostrzeżenia przerywa na pierwszym znaku spoza zakresu hex)
Buffer.from(h, 'hex').toString('base64')
Najczęściej zadawane pytania
Dlaczego ciąg szesnastkowy powoduje błąd?
Albo dane wejściowe zawierają znak, który nie jest cyfrą szesnastkową, np. literę O zamiast zera, albo liczba cyfr jest nieparzysta. Komunikat o błędzie wskazuje pozycję nieprawidłowego znaku; w przypadku nieparzystej długości sprawdź, czy nie brakuje wiodącego 0.
Jak długi będzie wynik w Base64?
=.Jak utworzyć skrót Subresource Integrity?
integrity="sha384-..." z wartością w Base64. Za pomocą OpenSSL można to zrobić jednym poleceniem: openssl dgst -sha384 -binary file.js | openssl base64 -A.Czy wynik to standardowy Base64, czy wariant bezpieczny dla URL?
+ i /, wymagany przez SRI, CSP i nagłówki sum kontrolnych HTTP. Jeśli potrzebny jest wynik bezpieczny dla URL, wybierz Base64URL jako kodowanie docelowe.