比特幣地址/私鑰大小和字元數之間的關係?
比特幣地址很
25 bytes
長,address = [Version Byte (1)][Hash 160 (20)][Checksum (4)]
而這個字元串中的字元數是 34。與私鑰相同:
32-byte
幾乎有 52 個字元。我想知道如何映射
number of characters
到size(Bytes)
比特幣地址(P2PKH)?
比特幣地址有很多種。您的範例指定由Base58 檢查編碼和錢包導入格式 (WIF) 定義的(舊版)pay-to-pubkey-hash (P2PKH) 地址,這也由base58 檢查指定
Base58 編碼將整個輸入有效負載視為一個大端大整數。考慮這些替代範例:
輸入值:
bc
在 ASCII 中:0x62 0x63
(2 個字節)解釋為 2 字節 int 並且編碼不帶前導零…基數 2:
110001001100011
(15 個字元)以10 為基數:
25187
(5 個字元)16 進制:
6263
(4 個字元)基數 58:
8VG
(3 個字元)所以接下來我們知道,對於這個例子,它需要 3 個 base58 字元來編碼兩個字節*。*讓我們向後執行並嘗試最小值和最大值:
以 58 為基數,最大值為 3 個字元,
zzz
編碼三個字節值:0x02fa27
基數 58,3 個字元的最小值
211
編碼兩個字節值:0x0d24
結論:
僅從這個範例中,我們發現我們無法僅根據編碼字元串的字元長度來確定原始值的字節長度。
獎金:
現代地址現在使用 bech32 編碼並代表隔離見證程序。bech32 規範在BIP173中定義,如下所示:
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
bech32 編碼不將解釋用作大整數,而是將輸入字節更直接地映射到輸出字元:
數據部分值:
- 1 字節:見證版本
- 將 2 到 40 字節的見證程序(由 BIP141 定義)轉換為 base32:
+ 從見證程序的位開始,首先是每個字節的最高有效位。 + 將這些位重新排列為 5 個組,並在需要時在末尾填充零。 + 使用上表將這些位轉換為字元。
由於前面的規則,地址的長度總是在 14 到 74 個字元之間,並且它們的長度模 8 不能是 0、3 或 5。版本 0 見證地址總是 42 或 62 個字元,但實現必須允許使用任何版本。
因此,總而言之,使用 bech32 地址,您可以根據編碼字元串的字元長度確定輸入值的字節長度:
在 bech32 中,每個字元代表 5 位