16진수 Base64 변환기

16진수 바이트를 붙여넣으면 같은 데이터를 Base64로 얻을 수 있습니다. 공백, 콜론, 0x 접두사 같은 구분자는 자동으로 제거되므로 해시와 지문을 그대로 붙여넣으면 됩니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 16진수 문자열을 입력란에 붙여넣습니다. ‘원본 형식’은 16진수, ‘대상 형식’은 Base64로 미리 선택되어 있습니다.
  2. 형식은 신경 쓰지 않아도 됩니다. 공백, 줄 바꿈, 콜론, 하이픈과 0x 또는 \x 접두사는 무시됩니다.
  3. 값을 URL, JWT, JSON Web Key에 넣을 예정이라면 ‘대상 형식’을 Base64URL로 바꾸십시오.
  4. Base64 결과를 복사합니다.

16진수를 Base64로 변환하는 이유

대부분의 해시 도구는 다이제스트를 16진수로 출력하지만, 많은 프로토콜은 길이가 3분의 1 짧은 Base64를 요구합니다. 대표적인 경우는 다음과 같습니다.

  • 하위 리소스 무결성(SRI). 스크립트와 스타일시트의 integrity 속성에는 Base64 다이제스트가 들어갑니다. 예를 들어 sha384- 뒤에 Base64 문자 64개가 이어지는 형태입니다.
  • 콘텐츠 보안 정책(CSP). 인라인 스크립트를 허용하는 해시는 Base64 값을 넣어 'sha256-...' 형태로 작성합니다.
  • HTTP API의 체크섬. Content-MD5 헤더와 Amazon S3 체크섬 헤더에는 md5sum이 출력하는 16진수 문자열이 아니라 바이너리 다이제스트의 Base64가 들어갑니다.
  • 짧은 식별자. UUID는 16바이트로, 16진수로는 32자리이지만 패딩 없는 Base64URL로는 22자에 불과합니다.

지원하는 16진수 형식

16진수 숫자는 대소문자를 구분하지 않습니다. 변환기는 디코딩하기 전에 공백 문자, 줄 바꿈, 콜론, 세미콜론, 쉼표, 하이픈과 0x, \x, %, &#x 접두사를 제거합니다. 따라서 AB:CD:EF 같은 OpenSSL 지문, 0x12, 0x34 같은 C 배열, \x12\x34 같은 이스케이프 문자열, 퍼센트 인코딩된 바이트, 하이픈이 들어간 UUID를 모두 그대로 사용할 수 있습니다.

정리한 후의 입력은 바이트당 두 자리씩, 짝수 개의 숫자로 이루어져야 합니다. 숫자 개수가 홀수이면 오류로 표시되며, 이는 대개 앞자리 0이 빠졌다는 뜻입니다. 예를 들어 0abc를 의도했는데 abc로 쓴 경우입니다.

16진수 텍스트가 아닌 바이트를 인코딩하기

흔히 하는 실수는 16진수 다이제스트를 일반적인 텍스트용 Base64 인코더에 붙여넣는 것입니다. 그러면 16진수가 나타내는 바이트가 아니라 0-9a-f 문자 자체가 인코딩되어 결과가 올바른 값보다 두 배 길어집니다. SHA-256 다이제스트라면 44자가 아니라 88자가 됩니다. SRI 속성이나 체크섬 헤더처럼 바이너리 다이제스트를 요구하는 곳에서는 이런 값을 거부합니다. 이 변환기는 먼저 16진수를 바이트로 디코딩합니다.

# 셸: 16진수 다이제스트를 Base64로
printf '%s' "$HEX" | xxd -r -p | base64

# 파일의 SRI 값을 한 번에 생성
openssl dgst -sha384 -binary script.js | openssl base64 -A

# Python
base64.b64encode(bytes.fromhex(h)).decode()

// Node.js(16진수가 아닌 첫 문자에서 오류 없이 멈춤)
Buffer.from(h, 'hex').toString('base64')

자주 묻는 질문

16진수 문자열에서 오류가 나는 이유는 무엇입니까?

입력에 16진수가 아닌 문자(예: 숫자 0 대신 영문자 O)가 들어 있거나 숫자 개수가 홀수이기 때문입니다. 오류 메시지에 잘못된 문자의 위치가 표시되며, 길이가 홀수라면 앞자리 0이 빠지지 않았는지 확인하십시오.

Base64 출력은 얼마나 깁니까?
16진수 자릿수를 2로 나누면 바이트 수가 되고, 여기에 3바이트마다 4문자로 계산해 올림합니다. 64자리 SHA-256 다이제스트는 = 기호 하나를 포함해 Base64 44자가 됩니다.
하위 리소스 무결성(SRI) 해시는 어떻게 만듭니까?
파일의 SHA-384 다이제스트를 계산하고 이 페이지에서 16진수 다이제스트를 변환한 다음, Base64 값을 넣어 integrity="sha384-..."로 작성합니다. OpenSSL을 사용하면 openssl dgst -sha384 -binary file.js | openssl base64 -A 명령 하나로 처리할 수 있습니다.
출력은 표준 Base64입니까, URL 안전 Base64입니까?
SRI, CSP, HTTP 체크섬 헤더에서 요구하는 대로 +와 /를 사용하는 표준 Base64입니다. URL 안전 출력이 필요하면 대상 형식으로 Base64URL을 선택하십시오.