파일 업로드
  1. base64hub
  2. 기타 진법
  3. Base32

Base32 인코더 및 디코더 (RFC 4648)

텍스트를 입력하면 입력하는 대로 RFC 4648 Base32가 만들어지며, = 패딩을 넣을지 고를 수 있습니다. 출력을 base32hex, Crockford, z-base-32로 바꾸거나 방향을 뒤집어 디코딩하세요.

무료 가입 없음, 제한 없음 로컬 업로드 없음 4가지 변형 RFC 4648, hex, Crockford, z-base-32 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

텍스트를 Base32로 인코딩하는 방법

  1. 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. 실시간이 체크되어 있으면 키를 누를 때마다 출력이 갱신됩니다.
  2. 출력 · Base32 (RFC 4648) 에서 결과를 읽으세요. 끝의 = 기호를 없애려면 출력 아래의 패딩 (=) 체크를 해제하세요.
  3. 다른 변형이 필요하면 변환 후를 열고 Base32hex, Crockford Base32, z-base-32 중에서 고르세요.
  4. 대신 디코딩하려면 방향 전환에서 Base32 (RFC 4648) → 텍스트를 누르세요. 전용 Base32 디코더는 처음부터 그 방향으로 시작합니다.
  5. 출력 복사나 다운로드로 결과를 가져가세요.

텍스트는 기본적으로 UTF-8로 바이트가 됩니다. 같은 텍스트를 Windows-1252, UTF-16LE, EUC-KR 같은 다른 인코딩으로 바꾼 Base32가 필요하다면 입력 아래의 문자 인코딩을 바꾸세요.

Base32의 원리

Base32는 입력을 5비트씩 읽고 5비트마다 문자 하나를 씁니다. 5바이트(40비트)는 정확히 8자가 되므로 출력은 입력보다 60% 큽니다. 같은 데이터의 Base64 문자열은 33% 더 클 뿐인데, 이 차이가 대문자와 숫자 여섯 개만 쓰는 대가입니다.

입력 길이가 5바이트의 배수가 아니면 마지막 묶음을 =로 8자까지 채웁니다. 다음은 이 도구로 만든 RFC 4648 테스트 벡터입니다.

입력Base32패딩 없이
fMY======MY
foMZXQ====MZXQ
fooMZXW6===MZXW6
foobMZXW6YQ=MZXW6YQ
foobaMZXW6YTBMZXW6YTB
foobarMZXW6YTBOI======MZXW6YTBOI

패딩에는 데이터가 없습니다. 디코더는 실제 문자 수로 바이트 수를 알아낼 수 있고, 그래서 많은 형식이 패딩을 생략합니다.

Base32 변형: RFC 4648, base32hex, Crockford, z-base-32

“Base32"는 한 계열의 이름입니다. 네 가지 모두 문자당 5비트를 담으며, 알파벳과 패딩 사용 여부가 다릅니다. 같은 5바이트 Hello를 각각으로 바꾸면 다음과 같습니다.

변형알파벳Hello패딩쓰이는 곳
RFC 4648 Base32A–Z, 2–7JBSWY3DP=TOTP/2FA 시크릿, Tor v3 onion 주소, IPFS CIDv1(b…, 소문자)
Base32hex0–9, A–V91IMOR3F=DNSSEC NSEC3 레코드. 인코딩된 문자열이 바이트와 같은 순서로 정렬됨
Crockford Base32I L O U를 뺀 0–9, A–Z91JPRV3F없음사람이 읽어 주고 입력하는 ID
z-base-32ybndrfg8ejkmcpqxot1uwisza345h769jb1sa5dx없음사람이 다루기 쉬운 키와 식별자

Base32hex와 Crockford는 비슷해 보이지만 다른 알파벳입니다. H 다음부터 어긋나므로 91IMOR3F와 91JPRV3F는 같은 바이트입니다. 잘못 고르면 오류 없이 디코딩되면서 조용히 다른 바이트를 돌려줍니다.

여기의 Crockford 디코더는 Crockford가 의도한 대로 너그럽습니다. I와 L은 1로, O는 0으로 읽고 하이픈은 건너뛰므로 91JP-RV3F도 Hello가 됩니다. Crockford의 선택적 체크 기호는 추가하지도 검사하지도 않습니다.

TOTP, 2FA 시크릿용 Base32

인증 앱은 보통 QR 코드로 표시되는 otpauth:// 링크에서 시크릿을 받습니다.

otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example

secret 파라미터는 패딩 없는 RFC 4648 Base32입니다. JBSWY3DPEHPK3PXP는 16자이므로 10바이트를 담습니다. RFC 4226은 160비트(20바이트) 시크릿을 권장하며, 이는 Base32 32자가 됩니다. 시크릿이 Base64나 hex로 저장되어 있다면 Base64를 Base32로로 변환하세요. Base64 텍스트를 이 페이지에 입력하면 그 문자 자체가 인코딩되어 엉뚱한 바이트의 올바른 Base32가 나오고, 거기서 만든 코드는 모두 거부됩니다.

TOTP 시크릿은 키입니다. 가진 사람은 누구나 코드를 만들 수 있습니다. 이 페이지는 브라우저 탭 안에서 시크릿을 처리하며, 콘텐츠 보안 정책이 Cloudflare 조회수 집계를 제외한 페이지의 네트워크 요청을 차단합니다.

명령줄과 Python에서 Base32

GNU coreutils에는 base64처럼 동작하는 base32 명령이 있습니다.

printf 'Hello' | base32
printf 'JBSWY3DP' | base32 -d

첫 줄은 JBSWY3DP를, 둘째 줄은 Hello를 출력합니다. Python 표준 라이브러리에는 RFC 4648 형식 세 가지가 모두 있습니다.

import base64

base64.b32encode(b"Hello")                          # b'JBSWY3DP'
base64.b32hexencode(b"Hello")                       # b'91IMOR3F'
base64.b32encode(b"Hi").decode().rstrip("=")        # 'JBUQ'

더 많은 인코딩 예제는 Python 페이지에 있습니다. Python이 내는 패딩과 소문자 오류를 포함한 디코딩은 Base32 디코더를 참고하세요.

자주 묻는 질문

Base32 출력은 왜 ======로 끝나나요?

Base32는 5바이트 블록을 8자로 바꿉니다. 마지막 블록이 짧으면 RFC 4648은 8자의 나머지를 =로 채우므로 Hi는 JBUQ====가 됩니다. 받는 쪽이 JBUQ만 원한다면 패딩 (=) 체크를 해제하세요.

Base32는 대소문자를 구분하나요?

RFC 4648 알파벳은 대문자지만 대부분의 디코더는 소문자도 받으며, 이 디코더도 그렇습니다. Python은 예외입니다. base64.b32decode는 casefold=True를 넘기지 않으면 소문자를 거부합니다.

Base32와 Base64 중 무엇을 써야 하나요?

프로그램만 데이터를 읽는다면 Base64를 쓰세요. 더 짧습니다(오버헤드 33% 대 60%). 사람이 값을 읽거나 입력하거나 불러 줘야 할 때, 또는 DNS 이름이나 일부 파일 시스템처럼 대소문자를 구분하지 않는 시스템을 통과해야 할 때는 Base32를 쓰세요.

Base32는 어떤 문자를 쓰나요?

RFC 4648 Base32는 A–Z와 2–7, 그리고 패딩용 =를 씁니다. 숫자 0, 1, 8, 9는 빠져 있으므로, 이 숫자가 든 문자열은 base32hex나 Crockford이거나 아예 Base32가 아닙니다.