如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系

今天就跟大家聊聊有關(guān)如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為晉寧企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),晉寧網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

1、私鑰、公鑰、地址之間的關(guān)系

私鑰、公鑰:橢圓曲線加密算法生成,但是無(wú)法通過(guò)公鑰倒推得到私鑰。公鑰的作用是在和對(duì)方交易時(shí),使用自己的私鑰加密信息,然后對(duì)方使用自己的公鑰解密獲得原始信息,這個(gè)過(guò)程俗稱簽名。

地址:由于公鑰太長(zhǎng),在交易中不方便使用,就對(duì)公鑰哈希進(jìn)行SHA256、RIPEMD160、Base58算法加密生成地址。

如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系

2、公私鑰加密流程

私鑰簽名過(guò)程:簽名即是使用私鑰將message加密,然后將原信息和加密后的信息發(fā)送出去的過(guò)程。

如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系

公鑰驗(yàn)簽過(guò)程:收到對(duì)方發(fā)送的信息和私鑰簽名后的信息,使用對(duì)方的公鑰機(jī)密簽名后的信息,并和原信息進(jìn)行比對(duì),一致則未篡改,反之。

如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系

3、Python實(shí)現(xiàn)(以太坊)

生成公私鑰

以太坊可以基于密碼生成公私鑰。

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
 

生成的結(jié)果:

密鑰是:123

私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246

公鑰是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2

私鑰簽名

當(dāng)有一筆交易時(shí),可以使用私鑰針對(duì)交易簽名,所以私鑰要保存好。

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 '私鑰格式不對(duì)'
 

結(jié)果是:

原文是:qwe

私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246

簽名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b

公鑰驗(yàn)簽

當(dāng)?shù)V工打包時(shí),可以使用公鑰進(jìn)行驗(yàn)證簽名。

def verifity(text, signature, address):
   """
   驗(yàn)證簽名
   :param text: 原文本
   :param signature: 簽名
   :param address: 公鑰
   :return: 驗(yàn)證結(jié)果
   """
   try:
       message = encode_defunct(text=text)
       address_new = Account.recover_message(message, signature=signature)
       if address == address_new:
           return '驗(yàn)證一致'
       else:
           return '驗(yàn)證失敗'
   except:
       return '格式錯(cuò)誤'
 

原文是:qwe

公鑰是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2

簽名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b

結(jié)果是:驗(yàn)證一致

私鑰推導(dǎo)公鑰

根據(jù)1中的關(guān)系私鑰是可以推出公鑰。

def recover_address(prv_key):
   """
   基于私鑰推出地址
   :param prv_key: 私鑰
   :return: 地址
   """
   try:
       acct = Account.from_key(prv_key)
       return acct.address
   except:
       return '格式錯(cuò)誤'
 

結(jié)果是:

私鑰是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246

結(jié)果是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2

看完上述內(nèi)容,你們對(duì)如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)站名稱:如何用Python實(shí)現(xiàn)區(qū)塊鏈公私鑰關(guān)系
URL地址:http://bm7419.com/article20/jcejjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、小程序開(kāi)發(fā)、自適應(yīng)網(wǎng)站、App設(shè)計(jì)搜索引擎優(yōu)化、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司