Address

如何測試比特幣地址是否被壓縮?

  • February 18, 2021

我有兩個比特幣地址:

1D8VSXHFAWNhAbruwUMbNp4hsXAnRNkYvX
12T15tvMGaymMX97X9KxVzyLF323r8v6Hg

一個是壓縮的,一個不是。

我如何測試哪個是哪個?(最好使用python 2.7)

提前致謝 :)

您無法確定(僅從 base58check 地址)是否壓縮了相應的公鑰。

“正常”付費公鑰散列 (P2PKH) 是壓縮或未壓縮公鑰的加密散列。因為散列不能被可行地反轉,所以您無法判斷公鑰在散列之前是壓縮的還是未壓縮的。

更具體地說,比特幣中的公鑰是一對整數 (x,y)。對於未壓縮的公鑰,這些整數被編碼為 256 位無符號大端整數,連接在一起,然後在前面加上一個 0x04 字節。結果是 65 字節長。

對於壓縮的公鑰,只有 x 座標被編碼(如上,為 256 位無符號 big-endian int)。事實證明,y 座標只能是兩個值之一,一個偶數,一個奇數。根據 y 的值(偶數為 0x02,奇數為 0x03),而不是添加單個 0x04 字節,而是添加單個 0x02 或 0x03 字節。結果是 33 個字節長。

最後,這些字節(來自上述兩段之一)經過bitcoin.org 開發人員指南中描述的地址轉換過程,其中包括採用不可逆的加密雜湊(實際上是兩個雜湊)。

請注意,為了贖回與 P2PKH 地址關聯的 UTXO,贖回者必須創建一個交易,其中包含未散列的公鑰,無論是壓縮的還是未壓縮的。如果區塊鏈中存在這樣的 tx,它可以連接到它的“正常”base58check 地址。這是不鼓勵地址重用的原因之一:一旦你贖回了一個 UTXO,你就“暴露”了你的公鑰,它比你的比特幣地址稍微敏感一些。

引用自:https://bitcoin.stackexchange.com/questions/37373