Z85 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 Z85로 변환하고 다시 되돌립니다. Z85는 ZeroMQ가 정의한 Base85 변형으로, 알파벳이 소스 코드의 문자열 리터럴 안에 이스케이프 없이 들어가도록 설계되었습니다.

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

사용 방법

  1. 텍스트나 바이트를 Z85로 바꾸려면 ‘인코딩’을, Z85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 키 같은 바이너리 값을 다룰 때는 인코딩 시 ‘입력 형식’을, 디코딩 시 ‘출력 형식’을 ‘16진수’로 설정합니다.
  3. 내용을 입력하거나 붙여넣거나 파일을 엽니다. 결과는 입력하는 즉시 갱신됩니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

Z85란?

Z85는 ZeroMQ RFC 32(IETF RFC가 아니라 ZeroMQ 커뮤니티 사양)에 정의되어 있습니다. 다른 Base85 인코딩과 마찬가지로 4바이트를 5문자로 바꾸며, 각 그룹을 빅 엔디언 32비트 수로 읽어 최상위 자리부터 85진수 다섯 자리로 표기합니다. 출력은 입력보다 25% 커집니다.

Z85의 특징은 알파벳에 있습니다. 0-9, a-z, A-Z와 기호 23개 .-:+=^!/*?&<>()[]{}@%$#를 사용하며, 작은따옴표와 큰따옴표, 백슬래시, 백틱, 쉼표, 세미콜론, 세로 막대, 물결표, 밑줄은 제외합니다. 이 알파벳은 소스 코드 문자열 안에서 안전하도록 설계되었으므로, Z85 값은 C, Python, JSON의 따옴표 사이에 이스케이프 없이 그대로 붙여넣을 수 있습니다.

Z85가 사용되는 곳

ZeroMQ는 CurveZMQ 키를 출력할 때 Z85를 사용합니다. 32바이트 공개 키나 비밀 키는 40자 Z85 문자열이 되며, 이는 zmq_curve_keypair()가 반환하고 CURVE 보안용 소켓 옵션이 받아들이는 형식입니다. 라이브러리는 zmq_z85_encode()와 zmq_z85_decode()도 제공하며, pyzmq 같은 바인딩에도 같은 함수가 있습니다.

// C (libzmq)
char text[41];                       // 32바이트 -> 40자 + NUL
zmq_z85_encode(text, key, 32);

# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b'))   # b'HelloWorld'

마지막 줄은 사양에 실린 테스트 벡터입니다.

입력 길이: 이 도구에 관한 참고 사항

RFC 32는 바이너리 입력이 4바이트의 배수, 인코딩된 문자열이 5문자의 배수일 것을 요구합니다. 패딩은 정의되어 있지 않으며, zmq_z85_encode() 같은 엄격한 구현은 다른 길이를 거부합니다.

이 도구는 다른 길이도 받아들이며, Ascii85 및 Base85와 같은 규칙에 따라 n바이트로 된 마지막 그룹을 n + 1문자로 만듭니다. 이는 비표준 확장입니다. 이렇게 만든 출력은 다른 Z85 디코더에서 거부될 수 있으므로, 호환성이 필요하다면 데이터를 4바이트의 배수로 맞추십시오. CurveZMQ 키는 32바이트이므로 항상 조건을 충족합니다.

사양

알파벳0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
출력 크기4바이트당 5문자(125%)
패딩없음
표준ZeroMQ RFC 32
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!nm=QNz.92jz/PV8aP
Base64.islsB}Dhz^42A@
你好<H}kFRm=

자주 묻는 질문

Z85와 Ascii85의 차이는 무엇입니까?
계산 방식은 같지만 알파벳이 다릅니다. Ascii85는 따옴표와 백슬래시가 포함된 !부터 u까지의 ASCII 범위를 사용하며, 0 바이트를 나타내는 z 약어가 있습니다. Z85는 문자열 안에서 이스케이프가 필요한 문자를 피하며 약어가 없습니다.
Z85는 패딩을 사용합니까?

아니요. 사양은 4바이트의 배수인 입력 길이만 허용합니다. 이 도구는 다른 길이도 마지막 그룹을 짧게 만들어 인코딩하지만, 이는 표준에 포함되지 않는 방식입니다.

Z85를 JSON, XML, URL에 사용할 수 있습니까?
JSON 문자열에는 이스케이프 없이 사용할 수 있습니다. XML과 HTML에서는 <, >, &를 이스케이프해야 합니다. URL에서는 ?, &, /, #이 특별한 의미를 가지므로 Z85는 적합하지 않습니다. 대신 Base64URL이나 Base58을 사용하십시오.
Z85로 인코딩한 CurveZMQ 키는 몇 자입니까?

CurveZMQ 키는 32바이트이므로 정확히 40자로 인코딩됩니다. 원래 키를 확인하려면 출력을 ‘16진수’로 설정하고 여기서 디코딩하십시오.