热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用Python实现区块链公私钥关系

今天就跟大家聊聊有关如何用Python实现区块链公私钥关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据

今天就跟大家聊聊有关如何用Python实现区块链公私钥关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1、私钥、公钥、地址之间的关系

私钥、公钥:椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。

地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址。


如何用Python实现区块链公私钥关系


2、公私钥加密流程

私钥签名过程:签名即是使用私钥将message加密,然后将原信息和加密后的信息发送出去的过程。

如何用Python实现区块链公私钥关系


公钥验签过程:收到对方发送的信息和私钥签名后的信息,使用对方的公钥机密签名后的信息,并和原信息进行比对,一致则未篡改,反之。

如何用Python实现区块链公私钥关系


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实现区块链公私钥关系有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。


推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
author-avatar
没了方向的路
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有