Base58 인코더 및 디코더

텍스트, 16진수 바이트, 작은 파일을 Base58로 변환하고 다시 되돌립니다. Bitcoin, Flickr, Ripple 알파벳 중에서 선택할 수 있으며, 필요하면 Base58Check 체크섬을 추가하거나 검증할 수 있습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트나 바이트를 Base58로 바꾸려면 ‘인코딩’을, Base58 문자열을 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
  2. ‘알파벳’을 선택합니다. 기본값인 ‘Bitcoin’은 IPFS와 솔라나에서도 사용하는 알파벳입니다.
  3. 내용을 입력하거나 붙여넣습니다. 해시나 공개 키 같은 원시 바이트라면 ‘입력 형식’을 ‘16진수’로 바꿉니다.
  4. 문자열에 4바이트 체크섬이 포함된 경우에만 ‘Base58Check 체크섬’을 켠 다음, 결과를 복사하거나 다운로드합니다.

Base58이란?

Base58은 비트코인을 위해 만들어진 바이너리-텍스트 인코딩입니다. 알파벳은 숫자와 라틴 문자 62개에서 헷갈리기 쉬운 네 문자, 즉 0(숫자 0), O(대문자 o), I(대문자 i), l(소문자 L)을 뺀 것입니다. +, /, =도 없으므로 Base58 문자열은 더블클릭 한 번으로 전체를 선택할 수 있고, 이스케이프 없이 URL에 넣을 수 있습니다.

Base64와 달리 Base58은 입력을 비트 그룹으로 나누지 않습니다. 입력 전체를 하나의 큰 수로 보고 58진법으로 표기하므로 패딩이 없으며, 바이트 하나만 바뀌어도 출력 문자가 여러 개 달라질 수 있습니다. 앞쪽의 0 바이트는 수치상 아무 값도 갖지 않으므로, 이를 보존하기 위해 각각을 알파벳의 첫 문자(Bitcoin 알파벳에서는 1)로 표기합니다. 출력 크기는 입력의 약 1.37배입니다.

Base58이 사용되는 곳

  • 비트코인. 레거시 주소와 WIF 개인 키는 버전 바이트와 체크섬을 붙인 Base58인 Base58Check를 사용합니다.
  • IPFS. 버전 0 콘텐츠 식별자(CIDv0)는 SHA-256 멀티해시를 Base58로 표현한 값입니다. 그래서 이 CID는 길이가 46자이고 Qm으로 시작합니다.
  • 솔라나. 공개 키, 계정 주소, 트랜잭션 서명은 체크섬 없는 일반 Base58로 표기합니다. 32바이트 키는 보통 43자 또는 44자가 됩니다.
  • Flickr와 XRP Ledger. Flickr 단축 링크는 Flickr 알파벳을, XRP 주소는 Ripple 알파벳을 사용합니다. XRP 주소가 r로 시작하는 이유가 여기에 있습니다.

Base58과 원시 바이트 사이를 변환하려면 Base58 16진수 변환 도구와 16진수 Base58 변환 도구를 이용하십시오. 영문자와 숫자로만 이루어진 식별자가 필요하다면 Base62와도 비교해 보십시오.

Base58 알파벳

알파벳문자(순서대로)
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

세 알파벳 모두 같은 58개 문자를 순서만 다르게 배열한 것입니다. 따라서 한 알파벳으로 인코딩한 문자열을 다른 알파벳으로 디코딩하면 다른 바이트가 나오거나 오류가 발생합니다.

코드에서 Base58 사용하기

# Python(pip install base58)
import base58
base58.b58encode(b'hello')      # b'Cn8eVZg'
base58.b58decode('Cn8eVZg')     # b'hello'

// JavaScript(npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));

사양

알파벳1-9 A-Z a-z(0 O I l 제외)
출력 크기약 137%(큰 수 변환)
패딩없음(앞쪽의 0 바이트는 1로 표현)
표준Bitcoin Base58
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!72k1xXWG59fYdzSNoA
Base64.isr1Nm3AS7ZcnN
你好2xuZUfBKa

자주 묻는 질문

앞쪽의 0 바이트가 1이 되는 이유는 무엇입니까?
Base58은 입력을 하나의 수로 변환하는데, 앞쪽의 0 바이트는 그 값을 바꾸지 않습니다. 이를 보존하기 위해 앞쪽의 0 바이트 하나하나를 알파벳의 첫 문자로 표기하며, Bitcoin 알파벳에서는 그 문자가 1입니다. 그래서 0 바이트 32개를 인코딩하면 1이 32개 이어진 문자열이 됩니다.
Base58은 대소문자를 구분합니까?

예. 대문자와 소문자는 서로 다른 값을 나타내는 문자이므로, 문자 하나의 대소문자만 바꿔도 디코딩된 바이트가 달라지거나 문자열이 유효하지 않게 됩니다.

Base58과 Base58Check의 차이는 무엇입니까?
Base58Check는 인코딩하기 전에 4바이트 체크섬(이중 SHA-256 해시의 앞부분)을 덧붙여 입력 오류를 감지할 수 있게 합니다. 이 페이지에서 ‘Base58Check 체크섬’ 옵션을 켜거나, 자세한 내용은 Base58Check 페이지를 참고하십시오.
입력이 약 20KB로 제한되는 이유는 무엇입니까?
입력 전체가 하나의 큰 수이므로 계산량이 길이의 제곱에 비례해 늘어납니다. Base58은 파일이 아니라 키, 해시, 주소를 위한 형식입니다. 큰 데이터에는 Base64나 Base85를 사용하십시오.