사용 방법
- Base58Check 문자열을 만들려면 ‘인코딩’을, 문자열을 검증하고 바이트를 복원하려면 ‘디코딩’을 선택합니다.
- 인코딩할 때는 ‘입력 형식’을 ‘16진수’로 설정하고 버전 바이트와 페이로드를 차례로 입력합니다. 예를 들어 00 다음에 20바이트 HASH160을 입력합니다.
- ‘Base58Check 체크섬’ 옵션은 켠 상태로 둡니다. 인코딩할 때는 체크섬이 덧붙여지고, 디코딩할 때는 체크섬이 검증됩니다.
- 디코딩할 때는 문자열을 붙여넣고 ‘출력 형식’을 ‘16진수’로 설정합니다. 체크섬을 제외한 버전 바이트와 페이로드가 표시됩니다.
Base58Check의 작동 방식
- 데이터의 종류를 나타내는 버전 바이트로 시작하고, 그 뒤에 20바이트 공개 키 해시 같은 페이로드를 붙입니다.
- 이 바이트를 SHA-256으로 해시하고, 그 결과를 다시 SHA-256으로 해시한 다음 앞의 4바이트를 체크섬으로 사용합니다.
- 체크섬을 덧붙이고 전체를 Base58로 인코딩합니다. 앞쪽의
0x00바이트는 각각1이 됩니다.
이 도구는 입력한 바이트 그대로를 대상으로 체크섬을 계산합니다. 버전 바이트를 자동으로 추가하지 않으므로 입력의 맨 앞에 직접 넣어야 합니다. 디코딩할 때는 마지막 4바이트를 제외한 나머지 전체로 체크섬을 다시 계산합니다. 두 값이 일치하면 버전 바이트와 페이로드가 표시되고, 일치하지 않으면 체크섬 오류가 표시됩니다. 무작위 오타가 검사를 통과할 확률은 약 40억분의 1에 불과합니다.
주요 버전 바이트
| 버전 바이트 | 데이터 | 인코딩된 문자열의 첫 문자 |
|---|---|---|
0x00 | 비트코인 P2PKH 주소(20바이트 HASH160) | 1 |
0x05 | 비트코인 P2SH 주소(20바이트 스크립트 해시) | 3 |
0x6F | 비트코인 테스트넷 P2PKH 주소 | m 또는 n |
0x80 | WIF 개인 키(32바이트, 압축 키는 뒤에 0x01 추가) | 5, 압축 키는 K / L |
bc1로 시작하는 SegWit 및 Taproot 주소는 Base58Check가 아니라 Bech32를 사용하므로 여기서 디코딩할 수 없습니다. XRP Ledger 주소는 같은 체크섬을 Ripple 알파벳과 함께 사용하므로 ‘알파벳’ 옵션에서 ‘Ripple’을 선택하십시오.
예시: HASH160에서 주소로
비트코인 제네시스 블록과 관련된 유명한 주소는 버전 바이트 00 뒤에 20바이트 HASH160이 이어진 형태입니다. ‘입력 형식’을 ‘16진수’로 두고 ‘Base58Check 체크섬’을 켠 채 입력하면 익숙한 주소가 나옵니다.
Input (Hex) 00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Output 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
코드에서는 Python base58 패키지가 b58encode_check()와 b58decode_check()를 제공하고, npm 패키지 bs58check가 encode()와 decode()를 제공합니다.
사양
| 알파벳 | 1-9 A-Z a-z(0 O I l 제외) |
|---|---|
| 출력 크기 | 약 137%, 4바이트 체크섬 별도 |
| 패딩 | 없음 |
| 표준 | Bitcoin Base58Check |
| 대소문자 구분 | 예 |
예시
| 입력 (UTF-8) | 출력 |
|---|---|
Hello, World! | gTazoqFvnegwaKM8v1B33sR |
Base64.is | 6XgW4KVJr8DBmZEAeJ |
你好 | DrMzxHL43oWHbW |
자주 묻는 질문
디코딩할 때 체크섬 오류가 발생하는 이유는 무엇입니까?
도구가 버전 바이트를 자동으로 추가합니까?
00입니다.WIF 개인 키를 디코딩할 수 있습니까?
80, 32바이트 키, 그리고 압축 키라면 끝의 01이 표시됩니다. 디코딩은 브라우저에서 로컬로 실행되지만, 실제 개인 키는 그래도 신중하게 다루십시오.bc1 주소를 디코딩할 수 있습니까?
아니요. 네이티브 SegWit 및 Taproot 주소는 자체 체크섬을 갖춘 별개의 인코딩인 Bech32 또는 Bech32m을 사용합니다. 비트코인에서 Base58Check는 1 또는 3으로 시작하는 레거시 주소(테스트넷에서는 m, n 또는 2)에만 사용됩니다.