Konwerter Hex na Base64

Wklej bajty w zapisie szesnastkowym, aby otrzymać te same dane w Base64. Separatory, takie jak spacje, dwukropki i prefiksy 0x, są usuwane automatycznie, więc skróty i odciski palców można wklejać bez zmian.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wklej ciąg szesnastkowy w polu „Wejście”. W polu „Z formatu” jest już wybrana opcja „Szesnastkowy (Base16)”, a w polu „Na format” – Base64.
  2. Nie trzeba przejmować się formatowaniem: spacje, podziały wierszy, dwukropki, łączniki oraz prefiksy 0x i \x są ignorowane.
  3. Jeśli wartość ma trafić do adresu URL, tokena JWT lub klucza JSON Web Key, zmień format docelowy na Base64URL.
  4. 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 integrity skryptó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-MD5 i nagłówki sum kontrolnych Amazon S3 zawierają Base64 binarnego skrótu, a nie ciąg szesnastkowy wyświetlany przez md5sum.
  • 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?
Podziel liczbę cyfr szesnastkowych przez 2, aby otrzymać liczbę bajtów, a następnie policz 4 znaki na każde 3 bajty, zaokrąglając w górę. 64-cyfrowy skrót SHA-256 daje 44 znaki Base64, w tym jeden znak =.
Jak utworzyć skrót Subresource Integrity?
Oblicz skrót SHA-384 pliku, przekonwertuj tutaj jego postać szesnastkową i wpisz 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?
Standardowy Base64 ze znakami + i /, wymagany przez SRI, CSP i nagłówki sum kontrolnych HTTP. Jeśli potrzebny jest wynik bezpieczny dla URL, wybierz Base64URL jako kodowanie docelowe.