사용 방법
- 텍스트나 바이트를 Z85로 바꾸려면 ‘인코딩’을, Z85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
- 키 같은 바이너리 값을 다룰 때는 인코딩 시 ‘입력 형식’을, 디코딩 시 ‘출력 형식’을 ‘16진수’로 설정합니다.
- 내용을 입력하거나 붙여넣거나 파일을 엽니다. 결과는 입력하는 즉시 갱신됩니다.
- 결과를 복사하거나 파일로 다운로드합니다.
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.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
자주 묻는 질문
Z85와 Ascii85의 차이는 무엇입니까?
!부터 u까지의 ASCII 범위를 사용하며, 0 바이트를 나타내는 z 약어가 있습니다. Z85는 문자열 안에서 이스케이프가 필요한 문자를 피하며 약어가 없습니다.Z85는 패딩을 사용합니까?
아니요. 사양은 4바이트의 배수인 입력 길이만 허용합니다. 이 도구는 다른 길이도 마지막 그룹을 짧게 만들어 인코딩하지만, 이는 표준에 포함되지 않는 방식입니다.
Z85를 JSON, XML, URL에 사용할 수 있습니까?
Z85로 인코딩한 CurveZMQ 키는 몇 자입니까?
CurveZMQ 키는 32바이트이므로 정확히 40자로 인코딩됩니다. 원래 키를 확인하려면 출력을 ‘16진수’로 설정하고 여기서 디코딩하십시오.