베이스2e15 인코더
베이스2e15 인코더 (C) 김철수 2004, 2005 파일 에디션 v0.11
베이스2e15 인코더는 해시다운 편집기의 베이스2e15 모드를 파일 단위로 다시 구현한 것입니다. 원본 편집기는 텍스트 상자에 붙여 넣은 내용을 인코딩하도록 만들어졌으며, 큰 파일을 넣으면 브라우저가 멈춥니다. 이 파일 에디션은 파일을 조각으로 나누어 처리하므로 멈추지 않습니다.
베이스2e15는 바이트 열을 15비트씩 잘라 한자 또는 한글 음절 문자 하나에 담습니다. 문자 하나가 15비트를 나르므로, 길이를 문자 수로 세는 곳(주소창의 해시, 글자 수 제한이 있는 입력란)에 바이너리를 넣을 때 base64보다 많이 들어갑니다.
인코딩 결과는 화면에 전부 표시되지 않습니다. 앞의 400자만 미리 보이고 나머지는 파일로 내려받습니다. 원본 편집기가 멈추는 이유가 바로 수백만 자를 문서에 그리려 하기 때문입니다.
모든 처리는 웹 워커 안에서 이루어지며 파일은 어디에도 전송되지 않습니다. 페이지를 저장해 두면 인터넷 연결 없이도 동작합니다.
인코딩 규칙은 해시다운의 원본 다트 구현에서 그대로 옮겼습니다. 같은 파일을 넣으면 같은 문자열이 나옵니다. 다만 LZMA 압축은 옮기지 않았습니다. 원본 편집기가 압축한 문자열을 여기에 붙여 넣으면 압축되었다는 사실만 알려 드립니다.
인코딩
파일을 골라 넣으면 베이스2e15 문자열이 담긴 .txt 파일이 나옵니다.
또는 눌러서 고르세요. 크기 제한 없음.
디코딩
베이스2e15 문자열이 담긴 파일을 넣거나, 짧은 문자열이면 아래 상자에 붙여 넣으세요. 원래 파일이 그대로 돌아옵니다.
또는 눌러서 고르세요.
기술 정보
바이트 열을 15비트 단위로 잘라 아래 세 구간에 나누어 넣습니다. 대리 문자(surrogate) 구간을 피하기 위해 구간이 셋으로 나뉘어 있습니다.
| 값 | 문자 | 쓰임 |
|---|---|---|
| 0x0000–0x1935 | U+3480–U+4DB5 | 15비트 |
| 0x1936–0x545B | U+4E00–U+8925 | 15비트 |
| 0x545C–0x7FFF | U+AC00–U+D7A3 | 15비트 |
| 0x00–0x7F | U+3400–U+347F | 마지막 자투리 7비트, 여기서 끝남 |
구간 밖의 문자는 디코딩할 때 그냥 건너뜁니다. 그래서 줄 바꿈이 섞여 있어도 됩니다. 마지막 자투리가 8비트 이상이면 7비트 문자 대신 15비트 문자에 0을 채워 넣습니다.
해시다운 파일 형식을 켜면 [이름 길이][이름 UTF-8][파일 내용] 뒤에 매개변수 바이트 0xC2가 붙습니다. 솔트나 비밀번호를 고르면 그 앞의 내용 전체가 RC4로 섞이고 솔트 바이트가 하나 더 붙습니다. 이 상태의 문자열은 원본 해시다운 편집기가 파일로 되돌릴 수 있습니다. 물론 편집기가 감당할 만큼 짧아야 합니다.
문자 하나는 15비트를 나르지만 UTF-8로 저장하면 3바이트를 차지합니다. 그래서 내려받은 .txt는 원본의 약 1.6배입니다. base64(1.33배)보다 큽니다. 이득은 파일 크기가 아니라 문자 수를 셀 때만 생깁니다.
크레딧
다음 분들께 감사드립니다:
릭 저우 — 해시다운과 베이스2e15 형식
(https://github.com/rinick/hashdown)
김영희 (http://hangul-lang.kr)
이민준 (http://aheui.github.io)
박서연 (웹사이트 없음)
최도윤 aka 워리어 (http://nostalgia8.org)
특별 감사:
큰 파일을 넣어 편집기를 멈추게 해 본 모든 분께