Base85 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 Base85로 변환하고 다시 되돌립니다. 이 페이지는 Python b85encode가 생성하고 Git 바이너리 패치에서 사용하는 변형인 RFC 1924 문자 집합을 사용합니다.

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

사용 방법

  1. 텍스트나 바이트를 Base85로 바꾸려면 ‘인코딩’을, Base85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 내용을 입력하거나 붙여넣거나, ‘파일 열기’로 파일을 불러옵니다. 원시 바이트를 다룬다면 ‘입력 형식’을 ‘16진수’로 바꿉니다.
  3. 결과는 입력하는 즉시 갱신됩니다. 디코딩할 때는 데이터 내용에 따라 ‘출력 형식’을 ‘텍스트’ 또는 ‘16진수’로 선택합니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

Base85란?

Base85는 4바이트를 5문자로 바꾸는 인코딩 계열입니다. 85진수 다섯 자리는 85 × 85 × 85 × 85 × 85 = 4,437,053,125가지 값을 담을 수 있어 모든 32비트 수를 표현하기에 딱 충분합니다. 그래서 출력은 입력보다 25%만 커지며, 33% 커지는 Base64보다 작습니다.

Base85 알파벳은 여러 가지가 있으며 서로 호환되지 않습니다. Ascii85(Adobe, PDF), Z85(ZeroMQ), 그리고 이 페이지에서 사용하는 알파벳이 있습니다. 이 페이지의 알파벳은 0-9, A-Z, a-z와 기호 23개 !#$%&()*+-;<=>?@^_`{|}~를 사용합니다. 따옴표, 쉼표, 마침표, 슬래시, 콜론, 백슬래시, 대괄호는 제외됩니다.

RFC 1924, Git, Python

이 문자 집합은 1996년 4월 1일 만우절 농담으로 발표된 RFC 1924 "A Compact Representation of IPv6 Addresses"(IPv6 주소의 간결한 표현)에서 유래했습니다. 이 문서는 128비트 IPv6 주소를 정확히 20자로 된 85진수 하나로 표기하자고 제안했습니다. 실제로 IPv6 주소를 그렇게 쓰는 사람은 없지만, 이 알파벳은 나중에 일반 바이너리 데이터에 다시 쓰이게 되었습니다.

  • Git은 패치(git diff --binary, git format-patch)에 바이너리 파일을 담을 때 zlib으로 압축한 데이터를 이 알파벳으로 인코딩하며, 각 줄 앞에 길이 문자를 붙입니다.
  • Python 3.4 이상은 base64.b85encode()와 b85decode()를 제공하며, 그 출력은 이 도구의 결과와 일치합니다.
  • Mercurial도 Git 스타일 diff에서 바이너리 파일에 같은 인코딩을 사용합니다.

다만 RFC 1924는 128비트 주소 전체를 한 번에 변환하는 반면 Git, Python, 이 도구는 4바이트 단위로 처리하므로, 16바이트 값을 인코딩하면 RFC 방식과 다른 결과가 나옵니다.

짧은 마지막 그룹

입력 길이가 4의 배수가 아니면 마지막 그룹을 0 바이트로 채워 인코딩한 뒤 앞의 n + 1문자만 남깁니다. 1바이트는 2문자, 2바이트는 3문자, 3바이트는 4문자가 됩니다. 디코더는 이 과정을 거꾸로 수행하므로 패딩 문자가 필요 없습니다. 이 변형에는 Ascii85의 z처럼 0 바이트를 줄여 쓰는 약어가 없습니다.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

사양

알파벳0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
출력 크기4바이트당 5문자(125%)
패딩없음
표준RFC 1924 문자 집합(Git, Python b85)
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

자주 묻는 질문

Base85와 Ascii85는 같은 것입니까?
계산 방식은 같지만 사용하는 문자가 달라 출력도 다릅니다. 또한 Ascii85는 0 바이트 4개를 z로 줄여 쓰고 Adobe 구분 기호로 감쌀 수 있습니다. PDF와 PostScript 데이터에는 Ascii85 페이지를 이용하십시오.
RFC 1924는 실제 표준이었습니까?

아니요. 만우절 농담으로 발표된 정보성(Informational) RFC이며 IPv6 주소에 실제로 쓰인 적은 없습니다. 이 문자 집합은 나중에 Git과 Python을 통해 널리 쓰이게 되었습니다.

Base85 출력은 얼마나 커집니까?
4바이트가 5문자가 되므로 출력은 입력의 1.25배입니다. Base64는 약 1.33배입니다. basE91은 이보다 조금 더 간결합니다.
Base85를 JSON이나 XML에 넣을 수 있습니까?
JSON에는 넣을 수 있습니다. 알파벳에 큰따옴표와 백슬래시가 없으므로 이스케이프할 문자가 없습니다. XML과 HTML에서는 <, >, & 문자를 이스케이프해야 합니다. Base85는 URL에 안전하지 않습니다.