您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何用Python實現區塊鏈公私鑰關系,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
私鑰、公鑰:橢圓曲線加密算法生成,但是無法通過公鑰倒推得到私鑰。公鑰的作用是在和對方交易時,使用自己的私鑰加密信息,然后對方使用自己的公鑰解密獲得原始信息,這個過程俗稱簽名。
地址:由于公鑰太長,在交易中不方便使用,就對公鑰哈希進行SHA256、RIPEMD160、Base58算法加密生成地址。
2、公私鑰加密流程
私鑰簽名過程:簽名即是使用私鑰將message加密,然后將原信息和加密后的信息發送出去的過程。
公鑰驗簽過程:收到對方發送的信息和私鑰簽名后的信息,使用對方的公鑰機密簽名后的信息,并和原信息進行比對,一致則未篡改,反之。
3、Python實現(以太坊)
生成公私鑰
以太坊可以基于密碼生成公私鑰。
from eth_account import Account
from eth_utils.hexadecimal import encode_hex
from eth_account.messages import encode_defunct
import json
def get_key(key):
"""
獲取公鑰私鑰
:return: 返回公鑰、私鑰
"""
ac1 = Account.create(key)
return encode_hex(ac1.key),ac1.address
生成的結果:
密鑰是:123
私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
公鑰是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
私鑰簽名
當有一筆交易時,可以使用私鑰針對交易簽名,所以私鑰要保存好。
def message_sign(text, prv_key):
"""
基于私鑰獲取簽名
:param text: 待簽名的文本
:param prv_key: 私鑰
:return: 簽名
"""
try:
message = encode_defunct(text=text)
result = Account.sign_message(message, prv_key)
result = str(result)
result = result[result.find("'signature':"):result.find(')})')]
return result[result.find("('") + 2:].replace("'", '')
except:
return '私鑰格式不對'
結果是:
原文是:qwe
私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
簽名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b
公鑰驗簽
當礦工打包時,可以使用公鑰進行驗證簽名。
def verifity(text, signature, address):
"""
驗證簽名
:param text: 原文本
:param signature: 簽名
:param address: 公鑰
:return: 驗證結果
"""
try:
message = encode_defunct(text=text)
address_new = Account.recover_message(message, signature=signature)
if address == address_new:
return '驗證一致'
else:
return '驗證失敗'
except:
return '格式錯誤'
原文是:qwe
公鑰是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
簽名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b
結果是:驗證一致
私鑰推導公鑰
根據1中的關系私鑰是可以推出公鑰。
def recover_address(prv_key):
"""
基于私鑰推出地址
:param prv_key: 私鑰
:return: 地址
"""
try:
acct = Account.from_key(prv_key)
return acct.address
except:
return '格式錯誤'
結果是:
私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
結果是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
看完上述內容,你們對如何用Python實現區塊鏈公私鑰關系有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。