以太坊地址生成过程

2024-08-29 16:08
文章标签 生成 地址 过程 以太

本文主要是介绍以太坊地址生成过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1 以太坊地址生成过程
    • 2 以太坊地址生成实例
      • 2.1 生成随机数作为私钥
      • 2.2 私钥生成公钥
        • 2.2.1 使用 bx 工具生成公钥
        • 2.2.2 使用 secp256k1-py 包生成公钥
      • 2.3 计算公钥哈希值
      • 2.4 得到地址
    • 3 以太坊地址生成 Python3 实现
    • 4 参考资料

1 以太坊地址生成过程

以太坊地址生成过程如下:

  1. 生成 256 位随机数作为私钥。
  2. 将私钥转化为 secp256k1 非压缩格式的公钥,即 512 位的公钥。
  3. 使用散列算法 Keccak256 计算公钥的哈希值,转化为十六进制字符串。
  4. 取十六进制字符串的后 40 个字母,开头加上 0x 作为地址。

2 以太坊地址生成实例

生成以太坊地址过程实例数据:

  • 私钥:1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20
  • 公钥:04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d
  • 地址:0xabcd68033A72978C1084E2d44D1Fa06DdC4A2d57

2.1 生成随机数作为私钥

生成 256 位随机数:

>>> import random
>>> r = random.randint(0, 2**256)
>>> r
14098500174935566811277058424286341448580475958153633347646702637404947635488
>>> r.to_bytes(32, byteorder='big').hex()
'1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20'

2.2 私钥生成公钥

以太坊使用的椭圆曲线算法为 secp256k1,从私钥生成对应的公钥有两种方法:比特币工具 bx 和 secp256k1-py 包。

2.2.1 使用 bx 工具生成公钥

Mac 用户可以使用 brew 安装 bx 工具:

$ brew install bx

以 1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20 作为私钥,然后使用 bx 工具将私钥转化为 secp256k1 的非压缩格式公钥:

$ bx ec-to-public 1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20 -u
04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d
2.2.2 使用 secp256k1-py 包生成公钥

使用 pip 安装:

$ pip install secp256k1

之后将私钥转化为公钥:

>>> import secp256k1
>>> private_key = '1f2b77e3a4b50120692912c94b204540ad44404386b10c615786a7efaa065d20'
>>> private_key = bytes.fromhex(private_key)
>>> privkey = secp256k1.PrivateKey(private_key)
>>> privkey.pubkey.serialize(compressed=False).hex()
'04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d'

2.3 计算公钥哈希值

要使用 keccak256 哈希算法,可以使用 PyCryptodome 工具,使用 pip 进行安装:

$ pip install pycryptodome

公钥开头去除 04,将剩余部分转化为字节串并使用 keccak256 算法进行哈希:

>>> from Crypto.Hash import keccak
>>> keccak_hash = keccak.new(digest_bits=256)
>>> public_key = '04dfa13518ff965498743f3a01439dd86bc34ff9969c7a3f0430bbf8865734252953c9884af787b2cadd45f92dff2b81e21cfdf98873e492e5fdc07e9eb67ca74d'[2:]
>>> public_key = bytes.fromhex(public_key)
>>> keccak_hash.update(public_key)
<Crypto.Hash.keccak.Keccak_Hash object at 0x102960588>
>>> keccak_hash.hexdigest()
'39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'

2.4 得到地址

取哈希值十六进制字符串后 40 个字母,开头加上 0x 生成最终的以太坊地址:

>>> '0x' + '39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'[-40:]
'0xabcd68033a72978c1084e2d44d1fa06ddc4a2d57'

3 以太坊地址生成 Python3 实现

使用 Python3 实现以太坊地址生成:

import secp256k1
from Crypto.Hash import keccakdef get_eth_addr(private_key_str=None):if private_key_str is None:private_key = secp256k1.PrivateKey()private_key_str = private_key.serialize()else:private_key_bytes = bytes.fromhex(private_key_str)private_key = secp256k1.PrivateKey(private_key_bytes)public_key_bytes = private_key.pubkey.serialize(compressed=False)public_key_str = public_key_bytes.hex()keccak_hash = keccak.new(digest_bits=256)keccak_hash.update(public_key_bytes[1:])h = keccak_hash.hexdigest()address = '0x' + h[-40:]return {"private_key": private_key_str,"public_key": public_key_str,"address": address}

4 参考资料

  • 以太坊在线地址生成工具:可以作为以太坊靓号地址生成工具,代码开源:https://github.com/bokub/vanity-eth。
  • https://pycryptodome.readthedocs.io/en/latest/src/hash/keccak.html:Keccak python 工具。
  • https://github.com/ctz/keccak:Python2 环境下使用的 Keccak,此为源代码,需要自己 clone 在本地使用。
  • https://github.com/ludbb/secp256k1-py:secp256k1 的 Python 库。

这篇关于以太坊地址生成过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118324

相关文章

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文