Base85 인코더 및 디코더

Base85는 4바이트를 5개의 ASCII 문자에 압축합니다. 64자가 아닌 85자의 문자 집합을 사용하므로, Base64의 “3바이트를 4문자로” 비율보다 더 촘촘합니다. Adobe의 Ascii85 방식은 모든 PostScript 파일과 PDF 파일 안에 들어 있으며, 더 새로운 Z85(ZeroMQ) 방식은 C 언어 문자열과 XML 안에서 문제를 일으키는 문자를 피합니다. 이 도구는 구분 기호를 붙일지 선택할 수 있도록 두 방식 모두 인코딩과 디코딩을 지원합니다.

Base85를 변환하는 방법

  1. 1

    방식 선택

    PDF/PostScript 자료에는 Ascii85를, 소스 코드와 네트워크 프로토콜에는 Z85를 선택합니다.

  2. 2

    텍스트 붙여넣기 또는 파일 업로드

    인코딩은 원시 바이트를, 디코딩은 Base85 문자열을 입력으로 받습니다.

  3. 3

    인코더가 4바이트씩 나눔

    4바이트 블록 하나하나가 5문자 Base85 문자열이 됩니다. 마지막 블록은 채움 문자를 더한 뒤 끝을 잘라냅니다.

  4. 4

    결과 복사

    Ascii85는 필요에 따라 `<~`와 `~>` 구분 기호로 감쌀 수 있고, Z85는 구분 기호 없이 출력됩니다.

크기 증가율 비교

인코딩 방식 4바이트당 문자 수 이진 대비 증가율
Hex 8 +100%
Base64 5.33(채움 문자 포함 시 8로 올림) +37%
Base85 5 +25%
원시 이진 4 0

따라서 1 MB 이진 데이터는 Base85에서 1.25 MB, Base64에서 1.33 MB, hex에서 2 MB가 됩니다.

Ascii85와 Z85의 문자 집합

Ascii85(RFC 1924 / Adobe): ASCII에서 33부터 117에 해당하는 !부터 u까지의 문자와, 0 바이트 4개를 줄여 쓰는 기호인 z를 사용합니다. PostScript와 PDF 스트림에서 쓰이며 <~...~>로 감쌉니다.

Z85(ZeroMQ): 따옴표 문자와 이스케이프가 필요한 문자를 피한 부분 집합입니다.

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#

JSON, XML, C 언어 문자열, 소스 코드 안에 이스케이프 없이 그대로 넣어도 안전합니다.

계산 원리

4바이트마다 빅엔디언 32비트 정수 N으로 읽습니다. 출력되는 5개 문자는 N을 85진법으로 나타냈을 때의 각 자리이며, 가장 높은 자리부터 나옵니다. 85^5 = 4 437 053 1252^32보다 크므로, 4바이트는 항상 5문자 안에 들어갑니다.

Ascii85가 중요한 경우

텍스트 편집기로 PDF를 열고 ASCII85Decode를 검색해 보세요. Adobe는 7비트 전송(옛 팩스 방식 시스템)을 통과해야 하는 내장 이미지와 글꼴을 위한 필터로 이를 사용합니다. Z85는 ZeroMQ CURVE 인증 키에서 널리 쓰입니다.

특수한 경우

  • 모두 0인 4바이트 블록 — Ascii85는 이를 !!!!! 대신 한 글자 z로 인코딩합니다.
  • 모두 공백인 4바이트 블록 — 일부 방식은 공백 네 개에 y를 쓰고, 일부는 쓰지 않습니다.
  • 마지막 부분 블록 — 0 바이트로 채운 뒤, 그에 해당하는 수만큼 출력 문자를 끝에서 잘라냅니다.

자주 묻는 질문

출력이 더 작다는 점에서는 그렇습니다. 어디서나 호환된다는 점에서는 그렇지 않습니다. Base85에는 XML, JSON, URL에서 이스케이프가 필요한 <, >, &, " 같은 문자가 들어갑니다(Ascii85 기준). Z85는 이를 피하지만, 대부분의 도구는 Base64를 기본으로 지원합니다.

PostScript나 PDF 파일을 다룬다면 Ascii85를 쓰세요. 소스 코드, 설정 파일, 네트워크 프로토콜에는 Z85가 적합합니다. RFC 1924 IPv6 인코딩은 같은 85개 문자를 다르게 배정한 것으로, 실제로는 거의 쓰이지 않습니다.

아니요. 둘은 서로 다른 문자 집합을 씁니다. Ascii85를 Z85 변환표로 디코딩하면 의미 없는 데이터가 나옵니다. 인코딩하기 전에 하나를 골라 일관되게 사용하세요.

PDF나 PostScript 스트림 안의 Adobe Ascii85에서는 필요합니다. 인코딩된 영역을 표시하기 때문입니다. 단독으로 쓰는 경우와 모든 Z85 출력에서는 구분 기호가 필요 없습니다.

관련 도구