Base58 16진수 변환기

비트코인 주소, 솔라나 공개 키, IPFS 해시 같은 Base58 문자열을 붙여넣으면 원시 바이트를 16진수로 보여 줍니다. 앞쪽의 1은 하나하나가 00 바이트가 됩니다.

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

사용 방법

  1. Base58 문자열을 입력란에 붙여넣습니다. 공백과 줄 바꿈은 무시됩니다.
  2. 출력에서 디코딩된 바이트를 16진수로 확인합니다.
  3. 16진수를 복사하거나, ‘입력과 출력 바꾸기’를 눌러 16진수를 다시 Base58로 변환합니다.

Base58이 16진수로 바뀌는 원리

Base58은 문자열 전체를 0, O, I, l을 뺀 58자 Bitcoin 알파벳으로 쓴 하나의 큰 수로 읽습니다. 16진수로 변환하면 같은 수를 16진법으로, 바이트당 16진수 두 자리씩 표기하므로 더해지거나 사라지는 것이 없습니다.

데이터 앞쪽의 0 바이트는 수치상 아무 값도 갖지 않으므로, Base58은 이를 각각 알파벳의 첫 문자인 1로 앞쪽에 기록합니다. 디코더는 앞쪽의 1을 하나하나 다시 00 바이트로 바꿉니다. 예를 들어 115Q는 0000ff로 디코딩되고, 1 문자 32개가 연속된 솔라나 System Program 주소는 0 바이트 32개로 디코딩됩니다. 변환은 브라우저에서 로컬로 실행됩니다.

비트코인, 솔라나, IPFS 예시

아래 16진수에는 각 부분을 구분하기 위해 공백을 넣었습니다.

Bitcoin address (P2PKH, genesis block)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
version | hash160 (20 bytes) | checksum (4 bytes)

Solana public key (SPL Token program)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 bytes, no version byte, no checksum

IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | length 32 | digest

레거시 비트코인 주소는 버전 바이트가 00이므로 1로 시작합니다. P2SH 주소는 3으로 시작하며 버전 05로 디코딩됩니다.

Base58Check 체크섬은 바이트에 그대로 남습니다

비트코인 주소와 WIF 개인 키는 Base58Check를 사용합니다. 인코딩하기 전에 페이로드의 이중 SHA-256 해시에서 가져온 체크섬 4바이트를 덧붙이는 방식입니다. 이 페이지는 일반 Base58을 사용하므로 체크섬도 다른 데이터와 똑같이 디코딩되어 마지막 16진수 8자리로 나타납니다. 레거시 주소의 hash160은 앞쪽의 00과 체크섬 사이에 있는 16진수 40자리입니다.

주소가 손상되지 않았는지 확인하고 체크섬을 뺀 페이로드를 얻으려면 Base58Check 페이지에서 디코딩하십시오. 솔라나 키와 IPFS 해시에는 체크섬이 없으므로 일반 Base58을 사용하는 것이 맞습니다.

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

# Python (pip install base58)
import base58
base58.b58decode('115Q').hex()      # '0000ff'

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

자주 묻는 질문

비트코인 주소가 20바이트가 아니라 25바이트로 디코딩되는 이유는 무엇입니까?

레거시 주소에는 1바이트 버전, 공개 키의 20바이트 hash160, 4바이트 체크섬이 들어 있습니다. 일반 Base58은 이 세 가지를 모두 돌려주므로 16진수 50자리가 나옵니다. hash160은 첫 바이트와 마지막 4바이트 사이의 전부입니다.

앞쪽의 1이 모두 00이 되는 이유는 무엇입니까?

Base58에서 문자 1은 값 0을 나타냅니다. 데이터를 일반 숫자로 다루면 앞쪽의 0 바이트가 사라지므로, 각각을 1로 표기하고 디코딩할 때 다시 00 바이트로 되돌립니다.

잘못된 문자 오류가 나는 이유는 무엇입니까?
Bitcoin 알파벳에는 0, O, I, l이 없으므로 이런 문자가 포함된 문자열은 Base58이 아닙니다. bc1로 시작하는 비트코인 주소는 Bech32라는 다른 인코딩을 사용합니다. 리플(XRP) 주소는 고유한 Base58 알파벳을 사용하므로 Base58 페이지에서 Ripple 알파벳을 선택해 디코딩하십시오.
솔라나 공개 키의 길이는 얼마입니까?

정확히 32바이트, 즉 16진수 64자리입니다. Base58로는 보통 43자 또는 44자입니다. System Program 주소에서 볼 수 있듯이 0 바이트로 시작하는 키는 더 짧을 수 있습니다.