사용 방법
- 텍스트를 Base32로 바꾸려면 ‘인코딩’을, Base32를 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
- ‘변형’을 고릅니다. 기본값은 TOTP 비밀 키와 대부분의 라이브러리에서 쓰는 ‘RFC 4648’입니다.
- 내용을 입력하거나 붙여넣거나 파일을 엽니다. 결과는 입력하는 즉시 갱신됩니다.
- 결과를 복사하거나 파일로 다운로드합니다.
Base32란?
Base32는 인쇄 가능한 문자 32개로 바이너리 데이터를 표현합니다. 문자 하나가 5비트를 담으므로 입력 5바이트가 출력 8문자가 됩니다. 출력은 입력보다 약 60% 커져 Base64보다 오버헤드가 크지만, 알파벳에 소문자와 헷갈리기 쉬운 기호가 없습니다.
RFC 4648에 정의된 표준 알파벳은 문자 A-Z와 숫자 2-7을 사용합니다. 숫자 0, 1, 8, 9는 문자 O, I, B와 혼동되지 않도록 제외되었습니다. 입력 길이가 5바이트의 배수가 아니면 출력 길이가 8의 배수가 되도록 =로 패딩합니다.
Base32가 사용되는 곳
- 2단계 인증. 인증 앱에 쓰이는 TOTP와 HOTP 비밀 키(
otpauth://링크의secret=값)는 Base32 문자열입니다. - 대소문자를 구분하지 않는 시스템. 알파벳에 대소문자 구분이 없으므로 Base32는 대소문자를 무시하는 파일 시스템, DNS 레이블, 이메일 주소에서도 손상되지 않습니다.
- 사람이 직접 입력하는 코드. 라이선스 키, onion 주소, 짧은 식별자는 소리 내어 읽고 입력하기 쉽도록 Base32를 사용합니다.
가독성보다 크기가 중요하다면 Base64가 더 간결합니다. 헷갈리는 문자가 없는 짧은 식별자가 필요하다면 Crockford Base32와 Base58을 비교해 보십시오.
Base32 변형
| 변형 | 알파벳 | 주요 용도 |
|---|---|---|
| RFC 4648 | A-Z 2-7 | TOTP 비밀 키, 일반 용도 |
| Base32hex | 0-9 A-V | 정렬 순서가 원본 바이트와 일치, DNSSEC NSEC3 |
| Crockford | 0-9 A-Z에서 I, L, O, U 제외 | 읽기 쉬운 ID, ULID |
| z-base-32 | 소문자, 순서 재배열 | 사람이 다루기 쉬운 키, OpenPGP WKD, ZRTP |
코드에서 Base32 사용하기
# Python
import base64
base64.b32encode(b'hello') # 인코딩
base64.b32decode('NBSWY3DP') # 디코딩
// Node.js에는 Base32가 내장되어 있지 않으므로 "hi-base32" 같은 패키지를 사용
// Go (import "encoding/base32")
base32.StdEncoding.EncodeToString(data)
사양
| 알파벳 | A-Z 2-7 |
|---|---|
| 출력 크기 | 5바이트당 8문자(160%) |
| 패딩 | = 문자로 8의 배수 길이까지 채움 |
| 표준 | RFC 4648 6절 |
| 대소문자 구분 | 아니요 |
예시
| 입력 (UTF-8) | 출력 |
|---|---|
Hello, World! | JBSWY3DPFQQFO33SNRSCC=== |
Base64.is | IJQXGZJWGQXGS4Y= |
你好 | 4S62BZNFXU====== |
자주 묻는 질문
Base32는 대소문자를 구분합니까?
RFC 4648 알파벳은 대문자로 정의되어 있지만 이 디코더는 소문자 입력도 받아들입니다. 소문자 출력이 필요하면 ‘소문자’ 옵션을 사용하십시오.
Base32 문자열 끝에 = 기호가 붙는 이유는 무엇입니까?
등호는 마지막 블록을 8문자로 채우는 패딩입니다. 대부분의 TOTP 앱을 비롯한 많은 시스템은 패딩 없는 Base32도 받아들입니다. 패딩을 없애려면 ‘패딩’을 끄십시오.
Base32는 원본 데이터보다 얼마나 커집니까?
5바이트가 8문자가 되므로 Base32 출력은 입력의 약 1.6배입니다. Base64는 약 1.33배입니다.
이 도구로 TOTP 비밀 키를 디코딩할 수 있습니까?
예. 비밀 키를 ‘디코딩’ 탭에 붙여넣고 출력을 ‘16진수’로 선택하면 원시 키 바이트를 볼 수 있습니다. 비밀 키에 포함된 공백은 무시됩니다.