当前位置:主页 > 区块链 > 钱包知识 > 通过私钥创建以太坊钱包地址

区块链钱包科普:如何通过私钥创建以太坊钱包地址?

2021-12-13 12:09:03 | 来源: | 作者:Timur Badretdinov
这篇文章主要介绍了区块链钱包科普:如何通过私钥创建以太坊钱包地址的相关资料,希望这篇关于如何通过私钥创建以太坊钱包地址的文章,能够帮助到各位朋友对区块链钱包原理的理解。

编者注:我们翻译和出版与密码学货币的私钥、地址和钱包有关的内容,无非希望传达清楚几个要点:

1. 密码学货币不同于传统的银行,你有很多工具可以生成一把私钥来持有密码学货币,既不需要向银行申请,也不需要给谁报备,没有任何人能阻止你拥有自己的私钥和钱包;

2. 公钥和用来接收转账的地址都是由私钥使用单向的数学运算推导出来的,如果不信任现有的工具,你完全可以自己使用这些数学运算来生成地址;同时,公开地址不会产生安全问题,因为地址无法反推出公钥,也无法反推出私钥;

3. 使用第三方提供的服务时,弄清楚服务的性质,不要向任何人暴露自己的私钥,并且定期备份。

区块链钱包科普:如何通过私钥创建以太坊钱包地址?

在本系列文章的第一篇中,我们得到了如下的比特币私钥:

60cf347dbc59d31c1358c8e5cf5e45b822ab85b79cb32a9f3d98184779a9efc2

编者注:这里没有写出私钥的生成过程。简单来说,私钥就是一串随机的十六进制字符串,为了安全(私钥不暴露、不被他人重现出来),这串随机数的生成环境应尽可能满足随机性、不可预测性、不可重现性。

所以,不要自己写一串数字来当私钥,因为你自以为的“随机”往往并不怎么随机,很不安全。

(理论上来说你确实可以自己连抛 256 次硬币产生符合长度要求(64 位)的随机数,但还是很不推荐。)

在本文中,我们会演示使用这个私钥来获得公开地址,以及与该私钥对应的以太坊钱包地址。

通过私钥来获得比特币钱包地址的具体流程有些复杂,因此我们会描述简化后的版本。我们需要使用一个哈希函数去获得公钥,还需要使用另一个函数去获得地址。

现在,让我们开始吧。

公钥

这部分内容和之前讨论比特币的文章中所说的相同,所以如果你已经读完了,那么就可以跳过(除非你想要复习一下)。

首先,我们需要在私钥上使用 ECDSA,即椭圆曲线数字签名算法。椭圆曲线是通过 y² = x³ + ax + b 公式得出的,其中 a 和 b 可以自定义。椭圆曲线家族有很多知名并且广泛应用的案例。比特币使用了 secp256k1 曲线,关于椭圆曲线密码学,如果你想了解更多,可以参考此文章。

以太坊使用了同样的椭圆曲线,secp256k1,因此对于比特币和以太坊来说,获得公钥的流程是相同的。

对私钥作了 ECDSA 运算之后,我们得到了 64 字节的整数,这是由两个 32 字节的整数串联组成,代表了椭圆曲线上某个点的 X 值和 Y 值。

在 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 模块并通过编码器解码了私钥。这样写更多是因为 Python 的关系,而与算法本身无关,为免误解,让我来好好解释一下。

Python 语言中,至少有两种数据类型可以保存私钥和公钥:“str”和“bytes”。前者对应的是 string(字符串),后者则是 byte array(数值)。Python 语言中的密码学运算只能对“bytes”类操作,将 byte 型数据作为输入,并且将输出作为结果。

但是,这里面有个小问题:作为字符串的“4f3c”和作为 byte array 的 4f3c 是不等同的,string 等于 byte array 和两个元素 O< 的结合。codecs.decode 方法就是将字符串转换为 byte array。本文中使用的密码学操作都要进行这一步骤。

钱包地址

一旦获得公钥,我们就可以计算出钱包地址,和比特币不同,以太坊在主网和所有测试网都有相同的地址。当用户发起转账和签名的时候,他们需要选择相应的网络。

为了通过公钥得出地址,我们需要做的就是在公钥上应用 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:]

校验和(checksum)

我们都知道,比特币是对公钥使用哈希算法,然后取结果的前 4 个数字,以此创建校验和。这对于所有比特币地址来说都是适用的,因此在没有添加 checksum 字节之前,用户无法获得有效地址。

编者注:校验和(checksum)是一种较为简单的验证数据完整性的方法,具体方法有很多种,比如说对一段数据逐次取 4 个比特,把取出的数全部加起来,最后得到一个 4 个比特的值作为校验和。如果两段数据不一样,产生的校验和有极大概率是不一样的。跟哈希函数的原理有相似之处,但够不上密码学哈希函数那样的强度。)

例:

MD5(cvsoiu687y0adbfiq7et5tgho0) = a277a316d38c21786eac518b83af898f

MD5(wysoiu687y0adbfiq7et5tgho0) = becd314fb8d277cfe20aaadc2b52c177

在以太坊中,产生地址的流程与此并不相同。最初的时候,以太坊中没有校验和这样的机制来验证秘钥的完整性。但是在 2016 年,Vitalik Buterin 引进了 checksum 机制,现在已经被钱包提供商和交易所使用。

在以太坊钱包地址上添加 checksum 使得我们可以通过大小写来校验地址的有效性。

首先,你需要获得地址的 Keccak-256 哈希值。注意,将地址放入哈希函数的时候不可以添加 0x 部分。

其次,你需要迭代初始地址的字符,如果哈希值中的第 i 个字节(byte)大于或者等于 8,那么你要将地址中的第 i 个字符变为大写,否则就还是保持小写。

最后,你需要把 0x 添加到结果的开头。如果忽略大小写,那么校验和地址与初始地址是相同的。但是,这种使用大写字母的做法让人们可以随时随地检查地址是否有效。你可以通过这个网页找到有效验证 checksum 的算法。

通过 checksum 验证方法,我们可以得到下面的结论:

“平均来看每个地址有 15 个校验位,并且随机得出的错误地址能够偶然通过检验的概率为 0.0247%。”

下面是将 checksum 添加到以太坊地址的代码:

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 repository 上了.

编者注:如上图所示,以太坊的公钥和地址都由私钥生成,并且其生成所需的数学运算都是完全公开的。

以上就是区块链钱包科普:如何通过私钥创建以太坊钱包地址的详细内容,更多关于通过私钥创建以太坊钱包地址的资料请关注脚本之家其它相关文章!

免责声明:本文只为提供市场讯息,所有内容及观点仅供参考,不构成投资建议,不代表本站观点和立场。投资者应自行决策与交易,对投资者交易形成的直接或间接损失,作者及本站将不承担任何责任。!

你可能感兴趣的文章

币圈快讯

  • 原油市场剧烈震荡后低位企稳Gate相关原油合约交易量及持仓位居行业前列

    2026-06-10 14:04
    随中东局势再现变数及美国强劲库存数据的支撑,原油在经历剧烈震荡后呈现低位企稳走势。据Gate平台行情数据显示,布伦特原油(BZ)现报91.31美元,24小时下跌1.28%;WTI原油(CL)现报88.05美元,24小时下跌1.64%。据CoinGlass数据显示,Gate平台原油相关合约交易持续活跃。其中,GateBZUSDT合约24小时交易额达837.70万美元,稳居行业前二;CLUSDT合约24小时交易额达1331.68万美元,持仓量约822.64万美元,均位居行业前列。 Gate首创大宗商品永续合约及CFD合约板块,覆盖BZUSDT(布伦特原油)、CLUSDT(WTI原油)及NG(天然气)等主流能源资产,支持7×24小时交易与USDT结算。依托Gate创新的统一账户体系,用户无需跨平台操作,即可配置股票、金属、外汇、指数及大宗商品等多元资产,助力用户在波动行情中实现更灵活、高效的一站式全球资产策略布局。
  • CMEGroup推出纳斯达克CME加密货币指数期货涵盖BTC、BitcoinCash、ETH、SOL、XRP、ADA、LINK及XLM

    2026-06-10 14:04
    据市场消息,CMEGroup推出纳斯达克CME加密货币指数期货,覆盖BTC、BitcoinCash、ETH、SOL、XRP、ADA、LINK及XLM。
  • GMGN聪明钱24h净流入榜ZINC居首

    2026-06-10 13:59
    据GMGN数据,过去24小时聪明钱净流入前5名代币如下:1.ZINC(zinc....yfi):净流入1千美元,过去24小时涨幅33.5%,现报$17.6737。2.Bountywork(J4x1....ump):净流入1千美元,过去24小时涨幅96%,现报$0.0009。3.Fox(D5MZ....ump):净流入718美元,过去24小时涨幅6482%,现报$0.0002。4.Samamfa(CLqi....ump):净流入628美元,过去24小时涨幅-73%,现报$0.0001。5.Austin(KEPy....ump):净流入576美元,过去24小时涨幅-81%,现报$0.0001。
  • TheSandbox推出面向创作者的AI游戏引擎已开放早期体验申请

    2026-06-10 13:35
    6月10日,TheSandbox宣布推出面向创作者的AI游戏引擎TheSandboxStudio,目前已开放早期体验申请。该引擎旨在降低游戏创作门槛,将创意转化为可发布产品。
  • Gate发布5月私人财富管理报告:市场承压下量化策略展现韧性稳定币监管迈向执行阶段

    2026-06-10 13:32
    Gate发布2026年5月私人财富管理报告。5月加密市场延续调整态势,受地缘政治不确定性升温及风险偏好降温影响,BTC月内下跌约2.9%,ETH跌幅超过11%,整体表现弱于同期传统风险资产。在市场波动加剧的背景下,Gate私人财富量化策略展现出较强韧性。数据显示,5月量化基金净值整体回暖,90%的策略录得正收益。其中,“星际对冲(USDT)”累计收益率提升至18.6%,统计范围内23个周期全部实现盈利,胜率保持100%。与此同时,USDT与BTC策略的回撤水平持续维持低位,整体风险控制表现优于市场基准。 同时,AI相关投资持续成为增长的重要驱动力。而宏观层面,通胀仍是影响市场预期的关键变量,市场普遍预计6月FOMC会议将维持现行利率水平不变。另一方面,随着《GENIUSAct》配套细则逐步落地,稳定币监管体系正从政策框架走向实际执行,为数字资产行业带来更多确定性。
  • 查看更多
更多

热门币种

  • 币种
    最新价格
    24H涨跌幅
  • bitcoin BTC 比特币

    BTC

    比特币

    $ 61293.86¥ 415235.25
    -3.15%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 1625.54¥ 11012.22
    -3.68%
  • tether USDT 泰达币

    USDT

    泰达币

    $ 0.9993¥ 6.7697
    -0.01%
  • binance-coin BNB 币安币

    BNB

    币安币

    $ 585.63¥ 3967.35
    -2.92%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0003¥ 6.7765
    +0.01%
  • ripple XRP 瑞波币

    XRP

    瑞波币

    $ 1.1154¥ 7.5562
    -4.49%
  • solana SOL Solana

    SOL

    Solana

    $ 64.2347¥ 435.15
    -4.28%
  • tron TRX 波场

    TRX

    波场

    $ 0.3213¥ 2.1766
    -1.35%
  • dogecoin DOGE 狗狗币

    DOGE

    狗狗币

    $ 0.083603¥ 0.5663
    -3.06%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 55.5179¥ 376.1
    -10.5%