Base85 인코더 및 디코더
Base85는 4바이트를 5개의 ASCII 문자에 압축합니다. 64자가 아닌 85자의 문자 집합을 사용하므로, Base64의 “3바이트를 4문자로” 비율보다 더 촘촘합니다. Adobe의 Ascii85 방식은 모든 PostScript 파일과 PDF 파일 안에 들어 있으며, 더 새로운 Z85(ZeroMQ) 방식은 C 언어 문자열과 XML 안에서 문제를 일으키는 문자를 피합니다. 이 도구는 구분 기호를 붙일지 선택할 수 있도록 두 방식 모두 인코딩과 디코딩을 지원합니다.
Base85를 변환하는 방법
-
1
방식 선택
PDF/PostScript 자료에는 Ascii85를, 소스 코드와 네트워크 프로토콜에는 Z85를 선택합니다.
-
2
텍스트 붙여넣기 또는 파일 업로드
인코딩은 원시 바이트를, 디코딩은 Base85 문자열을 입력으로 받습니다.
-
3
인코더가 4바이트씩 나눔
4바이트 블록 하나하나가 5문자 Base85 문자열이 됩니다. 마지막 블록은 채움 문자를 더한 뒤 끝을 잘라냅니다.
-
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 125는 2^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 출력에서는 구분 기호가 필요 없습니다.
관련 도구
A1Z26 암호 인코더
A1Z26 암호(A=1, B=2, ... Z=26)로 텍스트를 인코딩하거나 숫자열을 다시 글자로 디코딩합니다. 구분자도 사용자 지정할 수 있습니다.
AES 암호화 / 복호화
OpenSSL의 AES cipher로 낮은 위험의 텍스트를 암호화하고 복호화합니다. passphrase는 SHA-256으로 해시되며 Base64 출력은 IV와 암호문을 담습니다.
Atbash 암호 인코더
A-Z를 Z-A로 매핑하는 히브리식 치환 암호 Atbash로 텍스트를 인코딩하거나 디코딩합니다. 같은 연산으로 암호화와 복호화를 모두 처리합니다.
bcrypt 생성기
plaintext password에서 bcrypt hash를 생성합니다. cost factor 4부터 14까지 조정 가능하며 Laravel, Django, Node, PHP와 호환됩니다.
bcrypt 해시 생성기
bcrypt 해시를 생성하거나 평문 비밀번호를 기존 bcrypt 해시와 대조해 검증합니다. 생성과 검증을 한 도구에서 나란히 제공합니다.
Base32 인코더 및 디코더
RFC 4648 알파벳으로 Base32 문자열을 인코딩하고 디코딩하세요. TOTP 시크릿, 대소문자를 구분하지 않는 토큰, 사람이 입력하는 식별자에 유용합니다.