手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

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

时间:2024-03-19 阅读:
特战英豪官网版

特战英豪官网版

  • 类型:射击空战
  • 大小:61.82MB
  • 语言:中文版
  • 版本:v1.0.0

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

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

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

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


梦幻西游攻略(梦幻西游攻略站) TP钱包基础知识:如何进行TRX的转账、收款? OXT是什么币种?兰花协议/OXT币未来前景和价值分析 三款顶级应用(安卓手机必备黑科技软件推荐) DOGE是什么币种?DOGE币值得投资吗?DOGE币详细介绍 创造与魔法农耕管理台有什么用(创造与魔法农业) 币安交易所买币卖币教程,币安交易所优势 我的世界布吉岛怎么发全体(我的世界布吉岛怎么发全体消息手机版视频) 宝可梦传说阿尔宙斯奋斗石怎么获得(阿尔宙斯努力值刷什么) 梦幻西游手游烹饪和炼药哪个赚钱(梦幻手游烹饪和炼药学到多少级) 和平精英四级包嘟嘟怎么装备(和平精英4级包) 2023超火爆的手游有哪些(今年最火爆的手游) CREDIT币上线交易所了吗?CREDIT币价值分析 有哪些魔幻风的角色扮演手游(魔幻类角色扮演游戏) 给大家分享两个做副业的APP(做副业的软件) 比特派钱包使用教程:BITHD新手操作教程 三步完成创建 imToken钱包如何进行转账/收款? 宝可梦传说阿尔宙斯坐骑怎么获得(阿尔宙斯在哪捉) GDR概念是什么意思?GDR概念股票有哪些? 创造与魔法熔炉怎么弄(创造与魔法熔炉怎么做?) 什么游戏可以靠卖资源赚钱(靠卖资源赚钱的手游) 和平精英不朽星钻下一个段位是什么(和平精英中的不朽星钻等级别高不高) 工作量证明共识机制 2019年电影豆瓣TOP30(2019年电影推荐豆瓣高分) DNF贵族机要小队模式需要奶吗(贵族1需要多少钱) 手游推荐:吸血鬼题材(吸血鬼类手游) PDEX币在哪些交易所可以购买?PDEX币上线交易所大盘点 Uniswap v3如何革新UMA以及DeFi 英雄联盟亚索S12怎么出装(s12亚索最新出装) 三国志幻想大陆等级如何提升(三国志幻想大陆升级技巧) 宝可梦阿尔宙斯坐骑有哪些(阿尔宙斯获得) 10款飒爽美丽女性主角的游戏(好玩的女性主角游戏) 冰原守卫者地牢通关攻略(冰原守卫者手游攻略) windows10系统清理垃圾命令?清理电脑垃圾的三个命令 通过欧易OKEX交易所参与指南 小度Ax1800无线路由器安装调试几点说明(小度ax1800路由器怎么样) 时空猎人礼包有哪些(时空猎人礼包领取官网) 有什么打怪升级爆装备的手游(打怪升级爆装备的网络游戏) 附近找工作用什么软件好呢?多款app评测这几个最靠谱 ERC20代币是什么意思?一文读懂ERC20代币 王者荣耀沈梦溪大漠名商怎么获得(王者荣耀的沈梦溪) 幻塔友好的潜沙兔在哪(幻塔解密) DNF简易祝福之圣杯有什么用(dnf圣杯之战时装) BTC100是什么意思?BTC100交易平台介绍 英雄联盟拥抱星蚀任务怎么完成(拥抱星河是什么意思) 梦幻西游仙灵店铺在哪学() dnf武器幻化武器哪个好看?幻化最高成本武器来了 梦幻西游神秘委托信怎么获得(梦幻西游神秘委托能得到多少钱) dnf点卷充值成功未到账怎么办(dnf充值的点卷会过期吗) 怎么卖USDT币最安全?出售USDT币最安全方法介绍 诛仙手游神木枝隐藏任务怎么做(诛仙神木枝隐藏任务怎么获得) 币安怎么买狗狗币?币安买狗狗币流程图文教程 科普:怎么理解GameFi概念?GameFi有何优势? TPT币合约地址多少? 闪耀暖暖洛登之夜密码是多少(闪暖洛登之夜攻略) Jaxx Wallet是什么钱包?Jaxx(钱包)Wallet安全吗? 王者荣耀怎么评选区级称号(王者荣耀怎么评上区级排名) 火币网用人民币购买以太坊(ETH)操作步骤教程 超好玩的网络游戏有哪些(非常好玩的网络游戏) okex怎么提币?okex提币手续费怎么算的 比特币套保是什么意思?比特币套保怎么操作? 永续合约每天扣多少钱?永续合约手续费怎么算的? 原神流明石触媒有什么用(流明石任务) 英雄联盟小丑S12怎么出装(lol小丑出装s11) 王者荣耀打匹配增加英雄战力吗(王者打匹配增加英雄胜率吗) LAMB币是什么币?LAMB币投资前景怎么样点评 王者荣耀怎么绑定关系(王者荣耀怎么绑定关系账号) Sunbit怎么买卖法币?Sunbit交易所法币购买交易操作教程 我的世界物品栏大小怎么调(我的世界物品栏大小怎么调出来) Chia奇亚挖矿赚钱的四种方式 DNF炉岩核有什么用(地下城手游炉岩碳在哪刷) dnf强烈的气息有什么用(dnf强烈的气息多少钱一个) 消逝的光芒2欢迎上船选胡安还是丹尼尔(消逝的光芒2任务攻略) 王者荣耀司空震怎么玩 司空震玩法攻略(王者荣耀司空震怎么玩才厉害) cf机甲撕裂者怎么获得永久(csol机甲破坏者打哪个图) lol手游日女皮肤哪个好(英雄联盟手游日女出装天赋) 宝可梦传说阿尔宙斯奋斗值有上限吗(宝可梦阿尔宙斯专属技能) 宝可梦鲤鱼王怎么进化暴鲤龙(鲤鱼王如何进化暴鲤龙) dnf风暴逆鳞在哪里(DNF风暴逆鳞在哪里完成任务) imToken钱包怎么添加USDT?imToken钱包添加币种教程 QQ飞车手游飞行石有什么用(飞车所有飞饰) 诛仙手游新手攻略(诛仙手游新手攻略 新手入门技巧大全) 梦幻西游结拜有什么好处(梦幻西游结拜的npc叫什么) 创造与魔法云斑鹦鸟位置必刷点(创造与魔法云斑鹦鸟位置必刷点2023) 王者荣耀星期一几点发标(王者是星期一发标吗) 有没有ios可以玩的h5页游(苹果手机玩h5用哪个浏览器) 如何在imToken钱包中体验Arbitrum? 哈利波特魔法觉醒入口庭院在哪(哈利波特魔法觉醒 礼堂门口) 思维导图app哪个好(思维导图软件哪个好知乎) 迷你世界新手前期玩法详解 迷你世界新手攻略详解 王者荣耀周瑜S26怎么出装(王者荣耀周瑜2020最强出装) 和平精英手册一周多少积分(和平精英手册一周有多少积分) 江南百景图猫窝怎么获得(江南百景图绝美小猫放哪里) 三国志战略版如何发送阵容(三国志战略版怎么给好友发阵容) 王者荣耀英雄金色名字是什么意思(王者荣耀金颜色名字) 创造与魔法交易的货币如何得到(创造与魔法里面的交易) 第五人格海盗皮肤值多少钱(第五人格海盗套) UniswapV2交易所怎么下载?UniswapV2交易所下载方法图文教程 IOTA币是什么币种?埃欧塔/IOTA知识汇总介绍 dnf心悦会员怎么开通(地下城心悦会员怎么开)

热门文章

推荐专题

更多>>

游戏推荐

更多>>