사용 방법
- 텍스트나 바이트를 Base85로 바꾸려면 ‘인코딩’을, Base85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
- 내용을 입력하거나 붙여넣거나, ‘파일 열기’로 파일을 불러옵니다. 원시 바이트를 다룬다면 ‘입력 형식’을 ‘16진수’로 바꿉니다.
- 결과는 입력하는 즉시 갱신됩니다. 디코딩할 때는 데이터 내용에 따라 ‘출력 형식’을 ‘텍스트’ 또는 ‘16진수’로 선택합니다.
- 결과를 복사하거나 파일로 다운로드합니다.
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.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
자주 묻는 질문
Base85와 Ascii85는 같은 것입니까?
z로 줄여 쓰고 Adobe 구분 기호로 감쌀 수 있습니다. PDF와 PostScript 데이터에는 Ascii85 페이지를 이용하십시오.RFC 1924는 실제 표준이었습니까?
아니요. 만우절 농담으로 발표된 정보성(Informational) RFC이며 IPv6 주소에 실제로 쓰인 적은 없습니다. 이 문자 집합은 나중에 Git과 Python을 통해 널리 쓰이게 되었습니다.
Base85 출력은 얼마나 커집니까?
Base85를 JSON이나 XML에 넣을 수 있습니까?
<, >, & 문자를 이스케이프해야 합니다. Base85는 URL에 안전하지 않습니다.