사용 방법
- 텍스트를 Base32hex로 바꾸려면 ‘인코딩’을, Base32hex를 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
- ‘변형’은 ‘Base32hex’로 그대로 둡니다. 사용하는 형식에서 필요하다면 ‘패딩’을 끄거나 ‘소문자’를 켭니다.
- 내용을 입력하거나 붙여넣거나 파일을 엽니다. 결과는 입력하는 즉시 갱신됩니다.
- 결과를 복사하거나 파일로 다운로드합니다.
Base32hex란?
Base32hex는 RFC 4648 7절에 정의된 "Base 32 Encoding with Extended Hex Alphabet"(확장 16진수 알파벳을 사용하는 Base 32 인코딩)입니다. 동작 방식은 표준 Base32와 똑같습니다. 문자 하나가 5비트를 담고, 5바이트가 8문자가 되며, 출력 길이가 8의 배수가 되도록 =로 패딩합니다. 다른 것은 알파벳뿐입니다. Base32hex는 A-Z 2-7 대신 16진수가 끝나는 지점에서 이어서 셉니다. 숫자 0~9는 0~9를 나타내고, A는 10, V는 31입니다.
두 알파벳은 대부분의 문자를 공유하므로, Base32hex 문자열을 표준 Base32 디코더에 넣어도 오류 없이 처리되는 경우가 많지만 나오는 바이트는 틀립니다. 항상 인코딩할 때 사용한 것과 같은 변형으로 디코딩하십시오.
정렬 순서가 유지됩니다
알파벳은 ASCII 오름차순으로 배열되어 있고, 각 문자의 값은 위치에 따라 커집니다. 그 결과 두 Base32hex 문자열을 문자 단위로 비교한 순서는 원래 바이트를 비교한 순서와 같습니다. RFC 4648은 이를 표준 Base32와 Base64에는 없는 특성으로 짚고 있으며, 덕분에 Base32hex는 데이터베이스나 키-값 저장소처럼 정렬된 저장소의 키로 쓰기에 적합합니다.
모든 문자열을 같은 대소문자로 유지하고, 입력 길이가 서로 다르다면 패딩을 끄십시오. = 기호는 숫자와 문자 사이에 정렬되므로 순서를 깨뜨릴 수 있습니다.
DNSSEC NSEC3의 Base32hex
RFC 5155에 정의된 NSEC3 레코드는 DNS 이름이 존재하지 않음을 증명하면서도 존(zone)의 모든 이름을 나열하기 어렵게 만듭니다. 각 이름은 SHA-1로 해시되고, 20바이트 해시는 패딩 없는 32자 Base32hex 레이블로 표기되며 보통 소문자로 표시됩니다. 인코딩이 해시의 순서를 유지하므로 해시된 이름은 정렬된 체인을 이룹니다. 해시를 이런 레이블로 바꾸려면 16진수 입력으로 붙여넣고 ‘패딩’을 끈 다음 ‘소문자’를 켜십시오. 이 도구는 인코딩 단계만 수행하며, 솔트를 적용해 반복하는 NSEC3 해시 자체는 계산하지 않습니다.
코드에서 Base32hex 사용하기
# Python 3.10+
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
사양
| 알파벳 | 0-9 A-V |
|---|---|
| 출력 크기 | 5바이트당 8문자(160%) |
| 패딩 | = 문자로 8의 배수 길이까지 채움 |
| 표준 | RFC 4648 7절 |
| 대소문자 구분 | 아니요 |
예시
| 입력 (UTF-8) | 출력 |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
자주 묻는 질문
Base32와 Base32hex의 차이는 무엇입니까?
A-Z 2-7을 쓰고, Base32hex는 데이터의 정렬 순서를 유지하는 0-9 A-V를 씁니다. 두 형식은 서로 바꿔 쓸 수 없습니다.Base32hex는 대소문자를 구분합니까?
알파벳은 대문자로 정의되어 있지만 이 디코더는 소문자 입력도 받아들입니다. DNS 레이블처럼 소문자 출력이 필요하면 ‘소문자’를 켜십시오.
패딩을 사용해야 합니까?
=로 패딩하지만, NSEC3를 비롯한 많은 형식은 패딩을 생략합니다. 디코더는 두 형식을 모두 받아들이므로 수신 시스템이 요구하는 쪽을 선택하십시오.