0

디코딩 결과

Ascii85

인코딩 결과

Ascii85
종류

Ascii85에 대해서

Ascii85는 7비트 인쇄 가능한(Printable) ASCII 문자를 사용한 부호화(Encoding) 방식입니다. Base85라고도 불립니다.

Ascii85에서는 데이터를 4바이트씩 분할하고, 그것들을 5문자의 ASCII 문자로 변환하여 나타냅니다.

Ascii85에는 다양한 아류(Variant)가 존재합니다. DenCode에서는 이하 3종류의 Ascii85에 대응하고 있습니다. 오리지널은 btoa이며, 그 후에 Adobe나 Z85가 등장했습니다.

개요
Z85ZeroMQ에서 사용된다. 백슬래시(\)나 아포스트로피(')와 같이 이스케이프가 필요한 문자를 사용하지 않도록 한 것.
AdobeAdobe의 PostScript나 PDF(Portable Document Format) 파일 내에서의 이미지 등의 인코딩에 사용되고 있다. "<~" 와 "~>" 로 둘러싸인다.
btoaUNIX의 btoa 커맨드 형식. 과거에 바이너리 데이터의 교환에 사용되었지만, 현재는 일반적이지 않다. "xbtoa Begin" 과 "xbtoa End" 행으로 둘러싸인다.

Ascii85에서 사용되는 ASCII 문자는 다음과 같습니다. 4바이트 값을 빅 엔디안 부호 없는 정수로 취급하고, 그 값을 85진법의 각 자릿수(5자리)를 계산한 뒤, 다음 ASCII 문자를 바탕으로 Ascii85 변환 결과를 구합니다.

ASCII 문자
Z850123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
Adobe!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
btoa!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
(오리지널은 " "(스페이스)부터 "t"까지의 문자였지만, 끝의 스페이스를 제외하는 메일러(Mailer)가 있었기 때문에, 후에 스페이스를 제외한 "!"부터 "u"의 문자로 대체되었다.)

예를 들어, 'Hello'를 Ascii85로 변환하면 다음과 같습니다.

1. 4바이트마다 구분한다. 4바이트에 미치지 못하는 경우는 끝을 '00'으로 패딩한다.

48656C6C(16) 6F000000(16)  (Hell o)

2. 4바이트마다 빅 엔디안 부호 없는 정수로 취급하여, 그 값을 85진법의 각 자릿수로 변환한다.

48656C6C(16)
= 1214606444(10)
= 23 * 854 + 22 * 853 + 66 * 852 + 52 * 85 + 49
6F000000(16)
= 1862270976(10)
= 35 * 854 + 57 * 853 + 33 * 852 + 65 * 85 + 26

3. 85진법의 각 자릿수를 ASCII 문자로 변환한다. 끝을 '00'으로 패딩한 경우는 Adobe/Z85의 경우 패딩분을 제외한다.

23226652493557336526
Z85nm=QNzV
Adobe87cURDZ
btoa87cURDZBb;

4. 문자를 모두 연결하여 Ascii85 변환 결과로 한다. Adobe는 "<~" & "~>" 로 묶고, 80문자마다 개행한다. btoa는 "xbtoa Begin" & "xbtoa End" (데이터 길이나 체크섬 등도 포함)로 묶고, 78문자마다 개행한다.

변환 결과
Z85nm=QNzV
Adobe<~87cURDZ~>
btoaxbtoa Begin
87cURDZBb;
xbtoa End N 5 5 E 42 S 1f9 R a9f

그 외, 몇 가지 단축형(Abbreviation)이 정의되어 있습니다.

단축형
Z85없음
Adobe00000000(16) -> z
btoa00000000(16) -> z
20202020(16) -> y (btoa v4.2 이후)