16진수 Base58 변환기

16진수 바이트를 붙여넣으면 비트코인, 솔라나, IPFS에서 쓰는 Base58 문자열을 얻을 수 있습니다. 앞쪽의 00 바이트는 각각 앞쪽의 1이 되고, 나머지 바이트는 모두 정확히 유지됩니다.

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

사용 방법

  1. 16진수 바이트를 입력란에 붙여넣습니다. 공백, 콜론, 0x 접두사도 사용할 수 있습니다.
  2. 출력에서 Base58 결과를 확인합니다.
  3. 결과를 복사하거나, ‘입력과 출력 바꾸기’를 눌러 Base58을 다시 16진수로 디코딩합니다.

16진수가 Base58로 바뀌는 원리

먼저 16진수를 두 자리씩 바이트로 바꾸므로 입력의 자릿수는 짝수여야 합니다. 그런 다음 바이트 전체를 하나의 빅 엔디언 수로 읽고 Bitcoin 알파벳을 사용해 58진법으로 다시 표기합니다. 앞쪽의 00 바이트는 각각 1로 표기됩니다. 그래서 0000ff는 115Q가 되고, ff만 있으면 5Q가 됩니다.

Base58은 바이트당 약 1.37문자가 필요하므로 16진수 64자리(32바이트)는 43자 또는 44자로 줄어듭니다. 알파벳에 0, O, I, l, +, /가 없으므로 결과를 소리 내어 읽기 쉽고, 더블클릭으로 선택할 수 있으며, URL에도 그대로 넣을 수 있습니다. 모든 계산은 브라우저에서 이루어집니다.

솔라나와 IPFS 식별자 만들기

  • 솔라나: 주소는 32바이트 Ed25519 공개 키를 접두사나 체크섬 없이 Base58로 표기한 것입니다. 64자리 16진수 키를 붙여넣으면 주소를 얻을 수 있습니다.
  • IPFS CIDv0: CIDv0은 sha2-256 멀티해시를 Base58로 표기한 것입니다. 64자리 다이제스트 앞에 1220을 붙이면 Qm으로 시작하는 46자 문자열이 됩니다. 이때 다이제스트는 IPFS가 인코딩된 블록에 대해 계산한 값이어야 하며, 원본 파일의 SHA-256과는 다릅니다.
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

비트코인 주소에는 체크섬이 필요합니다

hash160만으로는 주소가 되지 않습니다. 레거시 비트코인 주소는 버전 바이트 00 뒤에 20바이트 hash160을 붙인 값을 Base58Check로 인코딩한 것이며, Base58Check는 인코딩하기 전에 4바이트 이중 SHA-256 체크섬을 덧붙입니다. 00과 hash160을 일반 Base58로 인코딩하면 체크섬이 없는 더 짧은 문자열이 나오며, 지갑은 이를 거부합니다.

대신 Base58Check 페이지를 이용하십시오. ‘입력 형식’을 ‘16진수’로 바꾸고 00 뒤에 hash160을 이어서 입력하면 체크섬이 자동으로 추가됩니다. 16진수가 이미 올바른 체크섬으로 끝난다면 이 페이지에서도 같은 주소가 만들어집니다.

0062e907b15cbf27d5425399ebf6f0fb50ebb88f18    (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

코드에서 16진수를 Base58로 변환하기

# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff'))     # b'115Q'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex'));    // '115Q'

자주 묻는 질문

hash160을 비트코인 주소로 바꾸려면 어떻게 합니까?
앞에 버전 바이트 00을 붙이고, 일반 Base58이 아니라 Base58Check로 인코딩하십시오. Base58Check 페이지에서 바이트를 16진수로 입력하면 이 작업을 대신해 줍니다.
결과가 여러 개의 1 문자로 시작하는 이유는 무엇입니까?

입력한 16진수가 같은 개수의 00 바이트로 시작하기 때문입니다. Base58은 이 바이트를 앞쪽의 1로 보존하므로 문자열을 디코딩할 때 다시 복원됩니다.

16진수 입력이 거부되는 이유는 무엇입니까?

16진수는 자릿수가 짝수여야 하고 0-9와 a-f 문자만 사용할 수 있으며, 대소문자는 상관없습니다. 공백, 콜론, 0x 접두사는 자동으로 제거되지만, 잘못 들어간 g 같은 문자나 빠진 자릿수 등 그 밖의 것은 오류가 됩니다.

이 페이지는 어떤 Base58 알파벳을 사용합니까?
솔라나, IPFS를 비롯한 대부분의 프로젝트에서도 사용하는 Bitcoin 알파벳입니다. Flickr나 Ripple 알파벳이 필요하면 Base58 페이지로 가서 알파벳을 선택하고 입력을 16진수 바이트로 넣으십시오.