사용 방법
- 텍스트나 바이트를 Base58로 바꾸려면 ‘인코딩’을, Base58 문자열을 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
- ‘알파벳’을 선택합니다. 기본값인 ‘Bitcoin’은 IPFS와 솔라나에서도 사용하는 알파벳입니다.
- 내용을 입력하거나 붙여넣습니다. 해시나 공개 키 같은 원시 바이트라면 ‘입력 형식’을 ‘16진수’로 바꿉니다.
- 문자열에 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 알파벳
| 알파벳 | 문자(순서대로) |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
세 알파벳 모두 같은 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.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
자주 묻는 질문
앞쪽의 0 바이트가 1이 되는 이유는 무엇입니까?
1입니다. 그래서 0 바이트 32개를 인코딩하면 1이 32개 이어진 문자열이 됩니다.Base58은 대소문자를 구분합니까?
예. 대문자와 소문자는 서로 다른 값을 나타내는 문자이므로, 문자 하나의 대소문자만 바꿔도 디코딩된 바이트가 달라지거나 문자열이 유효하지 않게 됩니다.