Base58 인코더 및 디코더
입력
Base58은 쉽게 헷갈리는 여러 문자를 피하도록 설계된 바이너리-텍스트 인코딩입니다. Bitcoin 알파벳은 0 O I l과 + /를 제외하며, 다른 시스템은 같은 58개 기호를 다른 순서로 배열합니다. 기존 Bitcoin Base58Check 주소와 IPFS CIDv0 문자열이 대표적인 예입니다. 이 도구는 브라우저 안에서만 작동하며 UTF-8 텍스트 또는 정확한 16진수 바이트를 Bitcoin, Ripple, Flickr 알파벳으로 변환합니다. 선택한 알파벳에 없는 문자는 거부합니다.
Base58을 인코딩하고 디코딩하는 방법
-
1
바이트 또는 Base58 문자열 입력
인코딩 방향은 16진수나 일반 텍스트를 받고, 디코딩 방향은 Base58을 받습니다.
-
2
필요하면 알파벳 선택
기본값은 비트코인의 Base58입니다. 호환성을 위해 Ripple과 Flickr 변형도 사용할 수 있습니다.
-
3
변환 실행
Base58은 깔끔한 5비트나 6비트 그룹으로 나누지 않습니다. 전체를 하나의 빅엔디언 정수로 보고 58로 반복해서 나눕니다.
-
4
결과 복사
인코딩된 문자열은 앞쪽의 0 바이트를 앞쪽의 `1` 문자로 보존합니다. 비트코인 알파벳에서 0을 나타내는 글자입니다.
비트코인 Base58 알파벳
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
빠진 글자에 주목하세요: 0, O, I, l. 알파벳의 첫 글자는 1이며 정수 0을 나타냅니다.
실제 동작 방식
비트를 고정된 그룹으로 나누는 Base64와 달리, Base58은 전체 바이트열을 하나의 빅엔디언 정수 N으로 보고 58진수로 표현합니다.
result = []
while N > 0:
result.prepend(alphabet[N mod 58])
N = N / 58
for each leading zero byte in input:
result.prepend(alphabet[0]) # i.e. '1'
그래서 Base58 인코딩은 스트리밍하기가 쉽지 않습니다. 어떤 글자라도 내보내기 전에 전체 숫자가 먼저 필요하기 때문입니다.
Base58과 Base58Check
기존 P2PKH 주소의 일반적인 Base58Check 페이로드는 25바이트입니다. 버전 1바이트, 해시 20바이트, 체크섬 4바이트로 이루어집니다. 체크섬은 버전과 해시를 이중 SHA-256으로 처리한 결과의 앞 4바이트입니다. 이 전체 페이로드를 Base58로 인코딩하면 익숙한 주소 문자열이 됩니다.
이 도구는 일반 Base58만 변환합니다. 주소의 버전과 체크섬을 확인해야 할 때는 전용 Base58Check 검사기를 사용하세요.
알파벳 변형
| 변형 | 사용처 | 비트코인과의 차이 |
|---|---|---|
| Bitcoin | BTC 주소, IPFS CIDv0 | 기준 |
| Ripple | XRP 주소 | 문자 위치를 서로 바꿈 |
| Flickr | 짧은 사진 URL | 소문자를 대문자보다 앞에 배치 |
그냥 Base64를 쓰면 안 되나요?
Base64는 바이너리와 인코딩된 텍스트 사이의 길이 변화가 일정해서(3바이트당 4글자) 효율적입니다. Base58은 오버헤드가 약간 가변적이지만 헷갈리는 글자가 없습니다. 누군가 주소를 손으로 옮겨 적거나 전화로 읽어야 한다면 바로 그 점이 중요합니다.
자주 묻는 질문
항상 그렇지는 않습니다. 사람이 문자열을 다룰 때는 Base58이 더 좋고, 기계가 주고받을 때는 Base64가 더 좋습니다. Base64는 글자당 6비트를 인코딩하고 Base58은 약 5.86비트이므로 Base64가 조금 더 압축적입니다.
Base58은 큰 정수를 인코딩하므로 상위 비트에 따라 길이가 한두 글자 달라질 수 있습니다. 일반적인 P2PKH 주소는 34글자이지만 33글자도 가능합니다.
문자열을 원시 바이트로 디코딩할 수 있습니다. 임의의 바이트를 손실 없이 보려면 16진수 출력을 선택하세요. 버전이나 체크섬은 확인하지 않으므로 디코딩 성공이 유효한 주소를 뜻하지는 않습니다. 주소 검증에는 Base58Check 검사기가 필요합니다.
예. 입력 맨 앞의 각 0 바이트는 출력에서 1 문자가 됩니다. 1로 시작하는 비트코인 주소가 동작하는 방식입니다.
관련 도구
Base85 인코더 및 디코더
Adobe Ascii85(PostScript/PDF) 또는 Z85(ZeroMQ) 방식으로 Base85를 인코딩하고 디코딩하세요. 이진 데이터에서는 Base64보다 더 작습니다.
bcrypt 생성기
plaintext password에서 bcrypt hash를 생성합니다. cost factor 4부터 14까지 조정 가능하며 Laravel, Django, Node, PHP와 호환됩니다.
Base32 인코더 및 디코더
RFC 4648 알파벳으로 Base32 문자열을 인코딩하고 디코딩하세요. TOTP 시크릿, 대소문자를 구분하지 않는 토큰, 사람이 입력하는 식별자에 유용합니다.
AES 암호화 / 복호화
OpenSSL의 AES cipher로 낮은 위험의 텍스트를 암호화하고 복호화합니다. passphrase는 SHA-256으로 해시되며 Base64 출력은 IV와 암호문을 담습니다.
bcrypt 해시 생성기
bcrypt 해시를 생성하거나 평문 비밀번호를 기존 bcrypt 해시와 대조해 검증합니다. 생성과 검증을 한 도구에서 나란히 제공합니다.
Atbash 암호 인코더
A-Z를 Z-A로 매핑하는 히브리식 치환 암호 Atbash로 텍스트를 인코딩하거나 디코딩합니다. 같은 연산으로 암호화와 복호화를 모두 처리합니다.