当前位置:首页 > 知识学习 > 详情

2022以太(tai)坊地址是怎么来的 以太坊地址生成过程

2023-06-09 08:20:09 阅读(24) 陶然歌词网

2022以(yi)太坊地址是怎么来的 以太坊(fang)地址生成过程-陶然歌词(ci)网

以太坊地址是怎么来的

以私钥(yao)为原料生成私钥(yao)的过程

取决于伪随机数发生器(PRNG)和足够的熵。私钥最重要的是(shi)从1到22?在-1范(fan)围内随机选择的整数。这(zhe)个范围内的任何数字(zi)都可以用作私钥。

2022以太(tai)坊地址是怎么来的 以太坊地址生(sheng)成过程-陶然歌词网

现在我们已经初步学习了私(si)钥背后的数学知识,可以自(zi)己生成一个有效的私钥(译者注:出(chu)于教育目的,可以按照作(zuo)者的思路,但不建议自己(ji)生成。)。让我们把私钥生成过程想(xiang)象成一个长度为78位的(de)水平数字密码锁(可能(neng)的组合数正好等于22?-1),那(na)么我们把这个密码锁分成3行,每行26位。你可(ke)以把PRNG函数想象成(cheng)随机排列数字并(bing)创建数字组合的东西:起初,每一位都是0,然后在每一位上(shang)随机选择一个特定(ding)的数字。假设我们用PRNG函(han)数生成乱序数,得到如(ru)下三行数:

(1)0440694132102621719184878;

(2)43014596507006094171646853;

(3)06780198554267270848908554;

2022以太坊地址是怎么来的(de) 以太坊地址生成过程-陶然歌词网

-浏览器使用Web Cryptography API(提供(gong)Crypto.getRandomValues(32)等加密原(yuan)语,或等效的32字节缓冲区)作(zuo)为PRNG。这个PRNG使用(yong)你的计算机熵源作为随机种子来生(sheng)成随机数。生成随机数时,请务必使用电子熵源,因为有研究表明(ming),人类并不擅长选择随机数(人们自己选择的数是有(you)模式的,达不到伪随机要求)-恭(gong)喜!现在你是私钥440694132110262171918487843014596507060941716685308019854270848908554的所有者。我们(men)可以用这个私钥生成(cheng)一个比特币或者以太坊地址,或者1到22之间的任何东西?-1是具有私钥范围的(de)区块链的地址。基于(yu)这个私钥生成一个以(yi)太坊地址,需要用到椭圆曲线点(dian)乘算法(需要专(zhuan)门文章说清楚)。因此,为了简单起(qi)见,我们将它留给计算机(ji)来处理。为此,我们(men)需要将这个私钥“告诉”计算机。麻烦的是计算机不能处理十进(jin)制形式的信息,它只能理(li)解二进制代码。目前,我(wo)们只有十进制数形式的私钥(yao)。所以我们首先要把(ba)这个私钥从十进(jin)制数的形式转换成计(ji)算机能理解的比特(也翻译成“位”或“比特”)和字节(一个字节等于8个比特)。位和字节在进行下一步之前,我们需(xu)要知道什么是位和字节。任何数字设(she)备只能理解由0和1组成的信息,通常称为(wei)bit。比特是“二进制数”,即(ji)只用1和0表示的数(shu)。虽然我们的智能手机和电脑(nao)可以显示汉字和图片,也可以(yi)播放歌曲,但都是比特来表示和处理(li)这些信息。比特越多,信息量越大,但归根结底无非是一堆0和1。根据上下文的不(bu)同,多个位可以(yi)表示字符(例如,使用ASCII编码时,字母A的定义为01100001)或数字(01100001也可用于表示十进制数(shu)97)。当十进制整数被转(zhuan)换为二进制形式时(shi),它被转换为基于2的幂的和,其中每(mei)个幂的指数增加。例如,我们通常以(yi)十进制形式计算数(shu)字,这是以10为基数的(de)幂的和。因此,在使用(yong)二进制时,我们可以用n位来表(biao)示和存储2的n次方以内的整(zheng)数。

2022以太坊地址是怎么来的 以太坊地址生成(cheng)过程-陶然歌词网(wang)

-8位视频游(you)戏机所能表示的最大十(shi)进制数是255,因(yin)为它们所使用的中央处理器(CPU)最多只能进行8位运算(译者注(zhu):上图左侧解释了为什么n位可以表示(shi)2的n次方以内的数——因为(wei)它的数组合有2的n次方(fang)的可能性;右图(tu)演示了一个二进制数表示多大(da)的整数,也就是相互转(zhuan)换的计算规则——虽(sui)然我们可以用二进制形式来表示任何数(shu),但是二进制形式太“繁琐”了。为了表示97,我们需要8个二(er)进制数字。二进制数字易于计(ji)算机处理,但不便于人类阅读。因此,计算机通常用十六进制而不是二进(jin)制来表示数据:位号系统以16为基(ji)数来表示数字。一位数的(de)十六进制数可以代表四位数的(de)二进制数。我们可(ke)以用十六进制数61来表示二进(jin)制数01100001或者(zhe)比二进制数少6位的十进制数97。十六进制数用ABCDEF来(lai)表示10到15,通常用来减少(shao)数据。私钥有多少位?回到私钥,我们(men)知道私钥的范围是1到22?-1。我们如何用比特来表(biao)示它?需要多少(shao)位?如上所述,当十进制整(zheng)数被转换成二进制形式时,它们被转换(huan)成以2为基数的幂和(he)。使用8位二进制数时(shi),我们能表示的最大数是2?2?2?2?23 22 21 2?也就是整数255。我(wo)们可以看到,要表达(da)2 n以内的数,需(xu)要n位。可以推断出,我(wo)们需要256位或32字节(256/8)来表示我们的(de)私钥。

2022以太坊地址是怎么来的 以太坊地址(zhi)生成过程-陶然歌(ge)词网-十六进制数据表(biao)示法旨在减少表示数字所需的(de)位数。但是,计算机(ji)只能用二进制来处理数据-

如果我们同意需要(yao)用32个字节来表示我们在[1,22?-1],那么在十六(liu)进制形式中,我们需要64个数字来表(biao)示私钥。现在我们可以把原来的私钥[X][X]4406941321102621719184878430145965070060941716468530678019854267270848908554[X][X]转换成十六进制形式:[X][X]66e 6769652 e6a 6 A 706572657 A 667777看到这些字母(mu),我们很容易判断出这个数(shu)是十六进制的。

从私钥到公钥

现在,我们可以把这个十六进(jin)制私钥告诉我们的(de)计算机了。我们可以使用(yong)JavaScript之类的编程语言很容(rong)易地导入这个十(shi)六进制的私钥,这样它就可以用于后续(xu)的乘法运算。在接下来(lai)的代码中,将之前获得的十六进(jin)制数作为私钥导入(“sk”是secret_key的缩(suo)写,是密码学中的标准记(ji)法)。这个十六进制数以16为基础。

-通过使用BigNumber库,我们可以确保在转换过程中不会丢失任(ren)何小数。这些数(shu)通常用指数表示(例如4.40694132102622E76),如果直接解析成十六进制,就会失去精度。如果不使用BigNumber库,我(wo)们得到的十六进(jin)制私钥就会变成

616 e 6769652 e 6 c 000000000000000000000-

导入私钥后,下一(yi)步就是创建公钥。您可能还记得,我们(men)在第一篇文章中提到过(guo),在获取以太坊(fang)地址之前,我们需要通过私钥生成公钥(yao)。根据以太坊黄皮书,公(gong)钥生成过程遵循标准的ECDSA公钥生成算(suan)法,其中我们将私钥乘以生成点得到(dao)一个坐标,坐标的x值和y值(zhi)拼在一起就是公钥(yao)。我们的公钥(密(mi)码学中记为“pk”)可以用来生成我们的(de)以太坊地址。[X] [X] [X] [X]-X和Y是椭圆曲线上的(de)点乘以我们的私钥(sk)得到(dao)的。虽然在任何(he)区块链中私钥都可以(yi)作为一个地址的唯一生成器,但(dan)是邰方特别使用椭圆曲线secp256k1来生成公钥;所以私钥的(de)签名操作也和这条曲线(xian)上述文章内容就是——

终于到了最(zui)后一步。有了公(gong)钥,我们就进行黄(huang)皮书中的最后一(yi)个操作:

给定一个私(si)钥,以太坊地址A就是ECDSA公钥对应的Keccak哈希值(zhi)最右边的160位。2022以太(tai)坊地址是怎么来的 以太坊地(di)址生成过程-陶然歌词网

由于我们已经有了自己的(de)ECDSA公钥,剩下的唯一事情就(jiu)是对我们的公钥执行(xing)Keccak哈希函(han)数,并取结果最右边的160位(wei)。当我们将这些运算的结果存(cun)储在一个“缓冲区”(就(jiu)像一个存储信息的小(xiao)盒子)中时,我们可以“扔掉(diao)”(切片)前24个十六进(jin)制数,只留下后40个十六进制数,或者更准确(que)地说,是20个字节(jie)(这是以太坊地址的长(chang)度)。-以太坊地址设计为20字节。有人认为删除一些字节(具体来(lai)说是12个字节)可能(neng)会造成碰撞,导致两(liang)个私钥产生相同的以(yi)太坊地址。然而到目前为止(zhi),这种情况从未发生过——你的(de)个人专属钱包

2022以太坊地址是怎么(me)来的 以太坊地址生成过程-第7张图片-陶然歌词网正如你所看(kan)到的,仅仅一个数字(虽然(ran)很长)就可以生(sheng)成一个以太坊地址来存储各(ge)种资产:从代表虚拟的猫、磁带、袜子、门票的NFT,到具(ju)有增值潜力的密码资产等。你的以(yi)太坊地址是公开(kai)的,和你的家庭地址(zhi)一样,但是只能用钥匙打开。如(ru)果你不想自己处理所有这(zhe)些过程,你可以在Portis上注册一个帐户。Portis会自动为你创建一个私钥(这个私钥(yao)只有你自己知道,因为它采用了端到端的加密架构)和对(dui)应的以太坊地址,供你在100多个dApp中使用。

以太坊地(di)址生成流程

以太坊地址生成流(liu)程如下:

1。生成256位随机数作为私(si)钥。

2。将私钥转换(huan)成secp256k1未压缩格(ge)式的公钥,即512位公(gong)钥。

3。使用哈希算法Keccak256计算公钥的哈希值,并将其转换为十(shi)六进制字符串。

4。取十六进制字(zi)符串的最后40个字母,并在开头添加(jia)0x作为地址。2022以太坊地址是怎么来的 以太坊地(di)址生成过程-第8张图(tu)片-陶然歌词网以太坊地址(zhi)生成示例

生成以太坊地址(zhi)的过程示例数据:私钥:1 F2 b 77 E3 a 450120692912 c 94b 204540 ad 4404386 b 10 c 615786 a 7 efaa 065d 20公(gong)钥:04 DFA 13518 ff 965498743 F3 a 01439 DD 86 BC 34 ff 969 c 7 a 3 f 04300hex()' 1 f2b 77 E3 a4 b 50120692912 c94b 204540 ad 4404386 b 10 c 615786 a 7 efaa 065d 20 '

私钥生成(cheng)公钥

以太坊使用的(de)椭圆曲线算法是secp256k1,由私钥生成。

使用bx(bx)工具生(sheng)成公钥

Mac用(yong)户可以使用布鲁尔安装(zhuang)bx(bx)工具:

$ brew安装bx

以一个f2b 77 E3 a 4b 501206292912 c 94b 204540 a 44404386 b 10 c 615786 a 7个EFA 065d 20作为私钥,然后使用bx(bx)工具将私钥转化为第256k条的非压缩格式公钥:

$ bx欧共体对公众1a 4b 501206292912 c 94 b 204540 ad 44404386 b10c 615786 a 7 EFA 065 d20-u04 DFA 13518 ff 96549743 F3 a 01439 DD 34 ff 9969 C7 a 3f 0430 bbf 88657344252953 c 9884 af 784 EB 67使用secp 256 k1 py包生成公(gong)钥使用点走吧安装:

$ pip安装秒256 k1

之后将私钥转化为(wei)公钥:

导(dao)入sec 256 k1 private _ key=' 1f2b 77 e3a 4b 501206292912 c 94b 204540 ad 44404386 b110c 615786 a 7 EFA 065d 20 ' private _ key=字节fromhex(private _ key)私钥=sec 256 k1 . private _ key privatkey。pubkey。序列化(compressed=false).hex()' 04 DFA 13518 ff 96549743 F3 a 01439 DD 86 BC 34 ff 9969 C7 a3 f 0430 bbf 886573452953 c 9884 af 787 B2 cadd 45 f92 dff 2 b81 e 21 cfdf 98873 e 492 e 5 FDC 07 e 9 EB 67 ca 74d

计算公钥哈希值(zhi)要使用keccak256战斗机哈(ha)希算法,可以使用加密模(mo)式(加密模式)工具(ju),使用点走吧进行安装:

$ pip安装pycrypt方法

公钥开头(tou)去除04年,将剩余部(bu)分转化为字节串并(bing)使用keccak256战斗机算(suan)法进行哈希:

来自加(jia)密。散列导入keccak _ hash=keccak。new(digest _ bits=256)public _ key=' 04 DFA 13518 ff 96549743 F3 a 01439 DD 86 BC 34 ff 9969 C7 a3 f 0430 bbf 886573452953 c 9884 af 787 B2 cadd 45 f92 dff 2 b81 e 21 cfdf 98873 e 492 e 5 FDC 07 e 9 EB 67 ca 74 de[2> public_key = bytes.fromhex(public_key)>>> keccak_hash.update(public_key)>>> keccak_hash.hexdigest()'39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'

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

>>> '0x'2022尚力财(cai)经小编 + '39c0eb3b26d4838930b1f34babcd68033a72978c1084e2d44d1fa06ddc4a2d57'[-40:]'0xabcd68033a72978c1084e2d44d1fa06ddc4a2d57'

以太坊地址(zhi)生成 Python3 实现使用 Python3 实现以太坊地址生成(cheng):

import secp256k1from 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 = 2022尚力财经小编 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 }

参考资料以(yi)太坊在线地址生成工具(ju):可以作为以太坊靓号地址生成工具(ju),代码开源: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 在本地使用(yong)。https://github.com/ludbb/secp256k1-py:secp256k1 的 Python 库。以上就是(shi)以太坊地址是怎么来的 以太坊地(di)址生成过程的详细内(nei)容,更多关于以太坊地址知(zhi)识分享的资料请关(guan)注尚力财经其它相关文章!

上一篇:卫校的费(fei)用一年多少钱(卫校的费用一年多少钱一个月)

下一篇:ntfs是什(shi)么意思

推荐阅读:

  • 2022eth国际(ji)交易平台eth交易平台选择

    2022eth国际(ji)交易平台eth交易平台选择

    eth国际交易平台eth交易平台选择eth以太币作(zuo)为继比特币之后价格最高的虚拟货(huo)币,同时也受到了(le)币圈小伙伴追捧,那(na)么eth国际交易平台都有哪些,今(jin)天尚力财经就带大家一起看看eth国际交易平台。…
    2023-06-09 阅读(17)
  • 优秀日记400字可抄(chao)暑假(优秀日记400字可抄暑假作业)

    优秀日记400字可抄(chao)暑假(优秀日记400字可抄暑假作业)

    暑假日记400字1。今日,晴,我的心情也是如此的,因为今天姐姐要带(dai)我去公园玩我最喜欢姐姐了,每次去(qu)公园玩都会跟我买(mai)好多好吃的也不会阻止(zhi)我玩游戏在旋转木马上我(wo)快乐的像只飞翔的小鸟2。今…
    2023-06-09 阅读(21)
  • 一个比(bi)特币值多少人民币2021年,有没有10万

    一个比(bi)特币值多少人民币2021年,有没有10万

    一个比特币值多少人民(min)币2021年,有没有10万,要说在2021年比特币价格确实涨了不少最高(gao)的时候已经突破了6万美元,也就是(shi)接近40万人民币(bi),接下来就跟随中本聪(cong)超市网小编一起了解一个比特币值…
    2023-06-09 阅读(22)
  • 我想你了怎么(me)高情商回复(男的说我想你了怎么高情商回复)

    我想你了怎么(me)高情商回复(男的说我想你了怎么高情商回复)

    女生说我想你(ni)了怎么回答高情商女生说我想你了怎么回答高(gao)情商如下:1、其实我(wo)也刚想对你说想你啦,你看我们是不是(shi)默契十足,连想对付都是一起想。2、你怎么吧我(wo)想说的话抢去了,这也(ye)太巧了…
    2023-06-08 阅读(20)
  • 2022uni是什么公司(si)发行的币,有什么价值

    2022uni是什么公司(si)发行的币,有什么价值

    uni其实是一种(zhong)平台货币,也就是类似于币安币、火腿币、ok币的数字货币(bi)。但目前UNI只有治理功(gong)能,属于治理token。Uniswap上产生的所有交(jiao)易费用都不会用于销(xiao)毁UNI,也不会给UNI货币持有…
    2023-06-08 阅读(16)