Cách sử dụng
- Dán các byte hex vào ô đầu vào. Dấu cách, dấu hai chấm và tiền tố 0x đều được chấp nhận.
- Đọc kết quả Base58 trong phần đầu ra.
- Sao chép kết quả, hoặc nhấn nút Hoán đổi đầu vào và đầu ra để giải mã Base58 trở lại hex.
Hex được chuyển thành Base58 như thế nào
Các chữ số hex trước tiên được chuyển thành byte, hai chữ số cho mỗi byte, nên đầu vào cần có số chữ số chẵn. Sau đó các byte được đọc như một số big-endian duy nhất và viết lại ở cơ số 58 bằng bảng ký tự Bitcoin. Mỗi byte 00 ở đầu được viết thành một ký tự 1, đó là lý do 0000ff trở thành 115Q, còn riêng ff thì trở thành 5Q.
Base58 cần khoảng 1,37 ký tự cho mỗi byte, nên 64 chữ số hex (32 byte) rút gọn còn 43 hoặc 44 ký tự. Bảng ký tự không có 0, O, I, l, + hay /, nên kết quả dễ đọc thành tiếng, có thể chọn bằng một cú nhấp đúp và dùng được trong URL. Mọi phép tính đều diễn ra trong trình duyệt của bạn.
Tạo mã định danh Solana và IPFS
- Solana: địa chỉ là khóa công khai Ed25519 dài 32 byte ở dạng Base58, không có tiền tố và không có tổng kiểm tra. Dán khóa hex gồm 64 chữ số để nhận địa chỉ.
- IPFS CIDv0: CIDv0 là một multihash sha2-256 ở dạng Base58. Đặt
1220trước giá trị băm gồm 64 chữ số, bạn sẽ nhận được một chuỗi 46 ký tự bắt đầu bằngQm. Giá trị băm phải là giá trị IPFS tính cho khối đã mã hóa, không giống với giá trị SHA-256 của tệp gốc.
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
Địa chỉ Bitcoin cần có tổng kiểm tra
Bản thân một giá trị hash160 chưa phải là địa chỉ. Địa chỉ Bitcoin kiểu cũ (legacy) là kết quả Base58Check của byte phiên bản 00 theo sau là 20 byte hash160; Base58Check nối thêm 4 byte tổng kiểm tra SHA-256 kép trước khi mã hóa. Mã hóa 00 và hash160 bằng Base58 thuần sẽ cho một chuỗi ngắn hơn, không có tổng kiểm tra, và các ví sẽ từ chối nó.
Thay vào đó, hãy dùng trang Base58Check: chuyển đầu vào sang hex, nhập 00 rồi đến hash160, và tổng kiểm tra sẽ được thêm tự động. Nếu chuỗi hex của bạn đã kết thúc bằng đúng tổng kiểm tra, trang này sẽ cho ra cùng một địa chỉ.
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18 (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Chuyển hex sang Base58 trong mã nguồn
# 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'
Câu hỏi thường gặp
Làm sao để biến một giá trị hash160 thành địa chỉ Bitcoin?
Vì sao kết quả bắt đầu bằng nhiều ký tự 1?
Chuỗi hex của bạn bắt đầu bằng đúng chừng ấy byte 00. Base58 giữ chúng lại thành các ký tự 1 ở đầu để có thể khôi phục khi giải mã chuỗi.
Vì sao đầu vào hex của tôi bị từ chối?
Hex cần số chữ số chẵn và chỉ gồm các ký tự 0-9 và a-f, viết hoa hay viết thường đều được. Dấu cách, dấu hai chấm và tiền tố 0x được tự động loại bỏ; mọi thứ khác, như một chữ g lạc vào hay thiếu một chữ số, đều là lỗi.