Public-Key
如何使用 OpenSSL / Bash 壓縮公鑰
我在 Shell 中生成私鑰和公鑰,如下所示:
openssl ecparam -name secp256k1 -rand /dev/random -genkey -noout -out private-key.pem openssl ec -in private-key.pem -outform DER | tail -c +8 | head -c 32 | xxd -p -c 32 > bitcoin_private_key.pem openssl ec -in private-key.pem -pubout -outform DER | tail -c 65 | xxd -p -c 65 > bitcoin_public_key.pem
然後我可以用以下方式獲取公鑰 X:
head -c 66 bitcoin_public_key.pem | tail -c 64
Y 的最後一個字節是:
tail -c 3 bitcoin_public_key.pem
壓縮的公鑰必須
0x02 + X
用於最後一個偶數字節Y
和0x03 + X
奇數字節。如何檢查最後一個 Y 的字節是奇數還是偶數?
您可以讓 OpenSSL 執行此操作,而不是“手動”壓縮:
openssl ec -in privatekey.pem -pubout -conv_form compressed -outform der | tail -c 33 | xxd -p -c 33 >compressedpub.hex
.pem通常用於表示 PEM 格式,而您創建的文件完全不是 PEM 格式或以任何方式 PEM 格式,所以這非常容易誤導和混淆。我在範例中使用了 .hex,但還有其他合理的可能性。
您只需檢查 Y 是否可被 2 整除(即 Y % 2 == 0)。這是預設的奇偶校驗概念……