Base45 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 Base45로 변환하고 되돌립니다. Base45는 QR 코드 영숫자 모드의 45개 문자를 사용하므로 바이너리 데이터를 적은 오버헤드로 QR 코드에 담을 수 있습니다.

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

사용 방법

  1. 텍스트를 Base45로 바꾸려면 ‘인코딩’을, Base45를 텍스트나 바이트로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 내용을 입력하거나 붙여넣거나 파일을 엽니다. 공백도 알파벳의 일부이므로 그대로 두십시오.
  3. 증명서 페이로드 같은 바이너리 데이터를 디코딩할 때는 출력을 ‘16진수’로 바꿉니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

Base45란?

Base45는 RFC 9285에 정의되어 있습니다. 알파벳은 숫자 0-9, 대문자 A-Z, 그리고 공백과 $ % * + - . / :의 기호 9개입니다. 이는 QR 코드가 간결한 영숫자 모드로 저장할 수 있는 45개 문자와 정확히 같습니다. 공백은 구분자가 아니라 알파벳에 속한 실제 문자라는 점에 유의하십시오.

인코더는 입력을 2바이트씩 읽어 0부터 65535까지의 숫자로 해석하고, 이 숫자를 가장 낮은 자리부터 Base45 숫자 세 자리로 씁니다. 마지막에 1바이트가 남으면 두 문자가 됩니다. 텍스트로 보면 결과는 입력의 1.5배로, Base64보다 큽니다.

Base45가 QR 코드에 적합한 이유

영숫자 모드에서 QR 코드는 두 문자를 11비트에 담습니다. Base64는 소문자가 필요해 이 모드를 쓸 수 없으므로, 문자당 8비트를 쓰는 바이트 모드로 대체되어 데이터 1바이트당 약 10.7비트가 듭니다. Base45는 영숫자 모드에서 바이트당 8.25비트만 필요하므로, 같은 데이터를 더 작고 스캔하기 쉬운 QR 코드에 담을 수 있습니다.

디코딩할 때는 공백을 있는 그대로 유지하십시오. 무시되는 것은 줄 바꿈뿐입니다. 소문자는 알파벳에 속하지 않으므로 유효하지 않은 문자로 표시됩니다.

EU 디지털 코로나19 증명서 디코딩하기

EU 디지털 코로나19 증명서의 QR 코드에는 HC1:로 시작하는 텍스트가 들어 있습니다. 나머지 부분은 Base45입니다. 증명서 데이터는 CBOR로 인코딩되고 COSE로 서명된 뒤 zlib으로 압축되고 마지막으로 Base45로 인코딩됩니다. 내용을 확인하는 방법은 다음과 같습니다.

  1. HC1: 접두사를 제거합니다. 이 네 문자도 올바른 Base45 문자이므로, 남겨 두면 잘못된 바이트가 나옵니다.
  2. 나머지를 이 페이지에서 16진수 출력으로 디코딩합니다. zlib 데이터는 보통 78 바이트로 시작합니다.
  3. 다른 도구로 바이트를 zlib 압축 해제하고 CBOR를 분석합니다.

이 도구는 Base45 단계만 처리합니다. 데이터의 압축 해제, 분석, 서명 검증은 하지 않습니다.

코드에서 Base45 사용하기

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # RFC 9285 예시: BB8
base45.b45decode('BB8')     # b'AB'

사양

알파벳0-9 A-Z 공백 $ % * + - . / :
출력 크기2바이트당 3문자(150%)
패딩없음
표준RFC 9285
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!%69 VDK2E:3404ESVDX0
Base64.isSH8LQEG%61*5P2
你好C-SEFK*.K

자주 묻는 질문

Base45 출력에 공백이 들어 있는 이유는 무엇입니까?

공백은 알파벳을 이루는 45개 문자 중 하나이므로 데이터를 담고 있습니다. Base45 텍스트에서 공백을 잘라 내거나 합치지 마십시오. 그러면 디코딩에 실패하거나 잘못된 바이트가 나옵니다.

HC1: 문자열은 어떻게 디코딩합니까?

HC1: 접두사를 제거하고 나머지를 16진수 출력으로 디코딩한 다음, 결과를 zlib으로 압축 해제하고 별도의 도구로 CBOR 데이터를 읽으십시오. 이 도구는 Base45 단계만 수행합니다.

Base45는 대소문자를 구분합니까?

예. QR 영숫자 모드에는 소문자가 없으므로 알파벳에는 대문자만 속합니다. 소문자 입력은 위치와 함께 유효하지 않은 문자로 표시됩니다.

Base45는 Base64보다 간결합니까?

일반 텍스트로는 그렇지 않습니다. Base45는 입력 크기의 1.5배이고 Base64는 약 1.33배입니다. 하지만 QR 코드 안에서는 Base45가 더 밀도 높은 영숫자 모드를 쓸 수 있으므로 더 간결합니다.