Python如何从私钥创建以太坊钱包地址!

007 以太坊钱包开发-助记词、私钥、地址 创建 Ethereum HD wallet 使用的 JavaScript 套件包含: bip39:实作 BIP39,随机产生新的 mnemonic code,并可以将其转成 binary 的 seed。 ethereumjs-wallet:产生和管理公私钥,我使用其中的 hdkey 子套件来创建 HD Wallet。 ethereumjs-util:集合许多 Ethereum 需要的运算功... 阅读详情

从私钥创建比特币钱包地址有点复杂。在这里,我们会使过程更加简单化。我们需要应用一个哈希函数来获取公钥,另一个哈希函数来获取地址。让我们开始吧。

公钥

我们需要做的第一件事是将ECDSA或椭圆曲线数字签名算法应用于我们的私钥。椭圆曲线是由等式 y²=x³+ax+b 定义的曲线,选择a和b。有一整套这样的曲线是公认并在使用的。比特币使用secp256k1曲线。

以太坊使用相同的椭圆曲线secp256k1,因此获取公钥的过程在两种加密货币中都是相同的。

通过将ECDSA应用于私钥 60cf347dbc59d31c1358c8e5cf5e45b822ab85b79cb32a9f3d98184779a9efc2 ,我们得到一个64字节的整数,它是两个32字节的整数,表示椭圆曲线上的点的X和Y,连接在一起。

对于我们的例子,我们得到了 1e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7 。

在Python中,它看起来像这样:

private_key_bytes = codecs.decode(private_key, ‘hex’)
# Get ECDSA public key
key = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1).verifying_key
key_bytes = key.to_string()
key_hex = codecs.encode(key_bytes, ‘hex’)

注意:正如你从上面的代码中看到的,我使用了 ecdsa 模块中的方法,并使用 codecs 解码了私钥。这与Python相关,而不是算法本身,但我将解释我们在这里做了什么来消除可能的混淆。

在Python中,至少有两个类可以保留私钥和公钥:“str”和“bytes”。第一个是字符串,第二个是字节数组。Python中的加密方法使用“bytes”类,将其作为输入并将其作为结果返回。Python学习交流群:1004391443

现在,有一个小问题:一个字符串,比方说, 4f3c 不等于字节数组 4f3c 。相反,它等于具有两个元素的字节数组, O& lt;。这就是 codecs.decode 方法所做的:它将字符串转换为字节数组。对于我们将在本文中进行的所有加密操作,这都是相同的。

钱包地址

一旦我们获得了公钥,我们就可以计算出地址。现在,与比特币不同,以太坊在主要和所有测试网络上都有相同的地址。用户在制作和签署交易时指定他们希望在过程中稍后使用的网络。

要从公钥创建地址,我们需要做的就是将Keccak-256应用于密钥,然后获取结果的最后20个字节。就是这样。没有其他哈希函数,没有Base58或任何其他转换。你唯一需要的是在地址的开头添加“0x”。

这是Python代码:

public_key_bytes = codecs.decode(public_key, ‘hex’)
keccak_hash = keccak.new(digest_bits=256)
keccak_hash.update(public_key_bytes)
keccak_digest = keccak_hash.hexdigest()
# Take the last 20 bytes
wallet_len = 40
wallet = ‘0x’ + keccak_digest[-wallet_len:]

校验

现在,你可能还记得,比特币通过哈希公钥并获取结果的前4个字节来创建校验和。对于所有比特币地址都是如此,因此如果不添加校验和字节,则无法获得有效地址。

在以太坊,这不是事情的运作方式。最初,没有校验和机制来验证密钥的完整性。然而,在2016年,Vitalik Buterin 引入了校验和机制,后来被钱包和交易所采用。

将校验和添加到以太坊钱包地址会使其区分大小写。

首先,你需要获取地址的Keccak-256哈希值。请注意,此地址应传递给没有 0x 部分的哈希函数。

其次,迭代初始地址的字符。如果哈希的第i个字节大于或等于8,则将第i个地址的字符转换为大写,否则将其保留为小写。

最后,在结果字符串的开头添加 0x 。如果忽略大小写,则校验和地址与初始地址相同。但大写字母让任何人都检查地址是否确实有效。你可以在此处链接的页面上找到校验和验证的算法。

正如你将在提案中读到的,对于此校验和方案,“平均每个地址将有15个校验位,如果错误输入,随机生成的地址将意外通过检查的净概率为0.0247%。”

这是将校验和添加到以太坊地址的代码:

checksum = ‘0x’
# Remove ‘0x’ from the address
address = address[2:]
address_byte_array = address.encode(‘utf-8’)
keccak_hash = keccak.new(digest_bits=256)
keccak_hash.update(address_byte_array)
keccak_digest = keccak_hash.hexdigest()
for i in range(len(address)):
    address_char = address[i]
    keccak_char = keccak_digest[i]
    if int(keccak_char, 16) >= 8:
        checksum += address_char.upper()
    else:
        checksum += str(address_char)

结论

如你所见,为以太坊创建地址比比特币简单得多。我们需要做的就是将ECDSA应用于公钥,然后应用Keccak-256,最后获取该哈希的最后20个字节。

 

 

 

 

如果你想使用代码,我将其发布到 GitHub存储库 。

======================================================================

分享一些比特币、以太坊、EOS、Fabric等区块链相关的交互式在线编程实战教程:

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发 ,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解 ,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解 ,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解 ,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。 
Python与区块链:构建简单的加密货币钱包 你还可以使用智能合约来创建自定义的代币(Token)。最常见的标准是以太坊上的ERC-20标准,它定义了代币的基本功能和接口。代码示例:部署ERC-20智能合约# Solidity源代码// 这里粘贴你的Solidity合约代码'''# 编译合约# 连接到以太坊网络# 设置默认账户(合约的部署者)# 创建合约对象# 部署合约本文详细介绍了如何使用Python构建一个简单的加密货币钱包,包括生成地址、私钥管理、多重签名交易、与智能合约交互等功能。 阅读详情

相关推荐

# 以太坊私钥恢复技术:Python实现原理与优化方法

本文从技术角度探讨基于Python实现的以太坊私钥恢复算法原理、优化策略及安全考量。注: 本文仅供学术研究和技术探讨之用。任何恢复工具的使用均应在对目标钱包拥有合法所有权的前提下进行。本文从技术角度详细探讨了基于Python的以太坊私钥恢复算法实现原理与优化方法。这些数据表明,通过合适的优化技术,Python实现的密码学应用可以达到满足实际需求的性能水平。,我们可以看到即使是以Python作为编程语言,也能通过合理的技术手段实现高效的密码学运算。,我们可以深入理解这类技术的数学基础、算法设计和实现挑战。

2504_90842827的博客 1037

以太坊地址生成过程

文章目录1 以太坊地址生成过程2 以太坊地址生成实例2.1 生成随机数2.2 私钥生成公钥2.3 计算公钥哈希值2.4 得到地址3 参考资料 1 以太坊地址生成过程 以太坊地址生成过程如下: 生成 256 位私钥。 将私钥转化为 secp256k1 非压缩格式的公钥,即 512 位的公钥。 使用散列算法 Keccak256 计算公钥的哈希值,转化为十六进制字符串。 取十六进制字符串的后 40 个...

张童鞋 1万+

python开发以太坊应用(使用web3)

目录 第一章,初识以太坊 第二章,以太坊之简易开发流程 第三章,以太坊之账户管理 第四章,以太坊之状态与交易 第五章,以太坊之智能合约 第六章,以太坊之过滤器 正文 ** 第一章,初识以太坊 ** 第一章 属于概述性的内容,暂时不写。以后补充上来。 ** 第二章,以太坊之简易开发流程 ** 在这一章,我们将完成一个简单的控制台应用,学习如何在命令行和在python中访问以太坊节点,并打...

语雨听风的博客 9889

使用python生成比特币公钥和私钥,并查询是否有余额

使用python生成比特币公钥和私钥,并查询是否有余额

weixin_50203845的博客 4126

私钥到地址的完整生成链:比特币与以太坊底层原理详解

区块链地址并非随机字符串,而是由密码学确定性流程生成的身份指纹。其本质是:私钥作为密码学安全随机数,通过椭圆曲线标量乘法不可逆地导出公钥,再经哈希压缩(比特币用SHA256+RIPEMD160,以太坊用KECCAK256)生成固定长度地址。这一单向过程根植于secp256k1曲线的离散对数难题,确保地址可公开验证、私钥无法反推。技术价值在于构建去中心化身份锚点,支撑交易签名、钱包导入、合约调用等核心场景。本文聚焦私钥、公钥、地址三者间的数学映射与工程实现差异,覆盖BIP32熵源要求、压缩/非压缩公钥影响、E

weixin_42697475的博客 187

如何使用Web3j生成私钥和地址,而不只是创建密钥存储JSON文件?

一个我提供的方法,通过将结果privatekey导入到MetaMask中并获得与预期相同的地址来验证: private static JSONObject process(String seed){ JSONObject processJson = new JSONObject(); try { ECKeyPair ecKeyPai...

mongo_node的专栏 5955

使用Python语言生成区块链地址

【代码】使用Python语言生成区块链地址。

南城猿的博客 2383

区块链钱包技术演进:从私钥安全到Web3连接

区块链钱包作为数字资产管理的核心工具,其技术架构演进始终围绕私钥安全与Web3连接两大核心命题。私钥生成算法从基础的ECDSA-secp256k1曲线发展到支持分层确定性钱包(BIP32),存储方案也从软件存储升级为硬件安全模块(HSM)防护。在Web3连接方面,WalletConnect协议通过中继网络优化实现了DApp与钱包的高效通信,而智能合约钱包(ERC-4337)则通过账户抽象实现了社交恢复等创新功能。随着MPC(多方计算)钱包和生物识别技术的应用,钱包安全性和用户体验持续提升。这些技术进步不仅解

weixin_33754065的博客 570

Python批量生成以太坊钱包地址与AES加密私钥存储实战

密码学安全随机数是区块链钱包安全的基础,私钥生成必须依赖操作系统级随机源。以太坊地址通过secp256k1椭圆曲线和Keccak-256哈希推导,确保唯一性与不可逆性。批量生成地址在测试环境搭建、空投活动策划和链上数据分析中具有重要技术价值,可大幅提升开发与测试效率。实际应用中需结合AES-GCM加密与scrypt密钥派生实现私钥安全存储,并遵循最小暴露原则。本文围绕Python生态下的eth-account库,详细讲解批量生成、加密落盘与解密验证的完整工程实践。

weixin_30430677的博客 239

Python远程管理和部署工具Fabric的用法实例

Fabric是一个强大的Python远程管理和部署工具,可以简化与远程服务器的交互操作。您可以使用Fabric来执行远程命令、上传和下载文件,以及执行其他部署任务。Fabric是一个Python库,用于简化远程服务器管理和部署任务的工具。它提供了一组简单而强大的API,使得在多个远程服务器上执行命令、上传和下载文件以及执行部署任务变得轻而易举。本文将介绍Fabric的用法,并提供一些示例代码来帮助您开始使用它。Fabric中的任务是一个使用装饰器定义的Python函数。类,并直接调用任务函数来运行任务。

BUG?不存在的! 301

区块链开发相关技术介绍

如下代码为基于Python代码的默克根生成方式。当信息发送至账户B后,账户B可以用自己的私钥解密发送的数据,再用账户A的公钥签证数据中的签名。如下代码为Block对象和Block的python代码实现,需注意的区块自身哈希的生成方式将借助哈希算法实现,代码中定义了calc_block_hash方法将区块头中的信息进行整合后以哈希算法加密以区块对应的哈希值。因为当前交易的数量为5,为奇数,由于当前交易数量为5,为奇数,所以需要在列表最后复制最后一个交易信息进行补全,将每两个交易进行组合,生成新的哈希值。

2201_76041915的博客 522

以太坊地址和公钥_以太坊地址是什么

以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。生成以太坊地址跟比特币地址都是不需要连接网络的###python code 生...

weixin_32497403的博客 4508

从 secp256k1 到地址派生:以太坊私钥空间、钱包安全自查与授权排查

公钥密码体系的安全性建立在密钥空间的规模之上:以太坊地址由 secp256k1 公钥经 keccak256 哈希后截断生成,2^160 的地址空间与 2^256 的私钥空间之间存在数量级鸿沟,因此随机穷举命中他人地址在工程上不具备可行性,真正现实的威胁往往来自助记词熵值不足、地址投毒以及恶意的 approve 授权。理解这套派生链路,并掌握交易字段(如 EIP-1559 费用结构、nonce)的校验方式,是把安全从“凭概率侥幸”变为“由工程可控”的前提。围绕地址派生、离线签名与冷热分离、用只读节点排查 al

weixin_30542979的博客 215

使用python创建metamask钱包

python创建metamask钱包

weixin_48839391的博客 980

UFS逻辑单元管理

介绍UFS 逻辑单元管理和配置

m0_51720747的博客 1945

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 324

揭秘Python操作ETH链:5步实现钱包地址生成与交易签名

掌握Python操作ETH链的完整流程,本文详解基于python区块链eth实现钱包地址生成与交易签名的5个核心步骤。涵盖密钥管理、Web3.py集成与安全签名技术,适用于DApp开发与链上交互场景,方法简洁高效,值得收藏。

LearnFlow的博客 874

Rust 与 Golang 深度对决:从语法到应用场景的全方位解析

Rust 定义函数以fn关键字开头,参数需明确指定类型,返回值类型紧跟在箭头->之后。// 定义函数add,接收两个i32类型参数a和b,返回i32类型结果,功能为两数相加a + bRust 和 Golang 各有千秋,在不同领域展现独特优势。Rust 凭借强大的内存安全与高性能,在系统编程、网络编程以及对内存安全和性能要求高的场景中表现突出;Golang 则以简洁语法和出色并发性能,在云计算、分布式系统、Web 开发等领域占据一席之地。

muyouking 1769

使用Python构建简单加密货币钱包-从基础到高级功能

你还可以使用智能合约来创建自定义的代币(Token)。最常见的标准是以太坊上的ERC-20标准,它定义了代币的基本功能和接口。本文详细介绍了如何使用Python构建一个简单的加密货币钱包,包括生成地址、私钥管理、多重签名交易、与智能合约交互等功能。这些基础功能构成了钱包应用的核心,同时也为后续的功能扩展提供了坚实的基础。区块链技术和加密货币仍在快速发展,不断涌现出新的应用场景和技术挑战。作为开发者,掌握钱包开发的基础知识将使你能够更好地适应和应对这些挑战,参与到更复杂、更创新的区块链项目中。

一键难忘的博客 3353

第一届“龙信杯”电子数据取证竞赛Writeup

第一届“龙信杯”电子数据取证竞赛Writeup

toto的博客 1万+

CODESYS V3.5 SP17编程环境全攻略:从安装到多语言编程实战

本文全面解析CODESYS V3.5 SP17编程环境,从安装配置到多语言编程实战技巧。详细介绍了运行时环境设置、六种IEC 61131-3语言的特性对比与混合编程策略,以及高级功能开发如自定义算法模块和实时通信配置。适合工业自动化工程师快速掌握这一强大工具。

weixin_30632089的博客 489

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

作者:Boblee,人工智能硕士毕业,擅长及爱好python,基于python研究人工智能、群体智能、区块链等技术,并使用python开发前后端、爬虫等。1、私钥、公钥、地址之间的关系...

Python中文社区 1810

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 992

Windows下使用python-web3.py进行以太坊Dapp开发笔记--第2篇(以太坊公钥加密功能python实现)

在进行程序编写过程中,发现以太坊没有内置的“公钥加密”功能,只有“公钥认证”,由于需求关系需要在DAPP中实现公钥加密,故探索了一下实现过程。

qq_41907714的博客 2102

ABAP Secure Storage 在事务码 SM59 中的应用

系统管理人员在进行维护时,应关注相关日志信息,及时发现可能出现的安全异常,并针对不同安全等级的操作制定相应的备份与恢复策略,以降低潜在风险。该区域在设计上具备高度隔离性,仅允许经过授权的组件访问。保存后,系统会将密码存储在 Secure Storage 中,这种处理方式充分体现了 SAP 标准程序在安全设计上的考量。对于系统管理员而言,这种机制在日常维护与审计中提供了有力的支持,可以通过比对存储数据的哈希值或其他完整性校验手段,及时发现异常变动,保障系统长期稳定运行。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 673

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Django Web开发技术栈清单-Python基础篇!
下一篇: 你都用Python做过哪些骚操作?
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值