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

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

2023-06-11 08:18:40 阅读(45) 大连信息网

2022以太(tai)坊地址是怎么来的 以(yi)太坊地址生成过程-大连信(xin)息网

以太坊地(di)址是怎么来的

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

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

2022以太坊地(di)址是怎么来的 以太坊地址生成过程(cheng)-大连信息网

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

(1)0440694132102621719184878;

(2)43014596507006094171646853;

(3)06780198554267270848908554;

2022以太坊地(di)址是怎么来的 以太坊地址生成过程-大连信息网

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

2022以太坊地址是怎么来的 以(yi)太坊地址生成过程-大连信息网

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

2022以太坊(fang)地址是怎么来的 以太坊地址生成过(guo)程-大连信息网-十六进制数据表示(shi)法旨在减少表示数字所需的位数。但是(shi),计算机只能用二进制来处理数据-

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

从私钥到(dao)公钥

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

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

616 e 6769652 e 6 c 000000000000000000000-

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

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

给定一个私钥,以太坊地址A就是ECDSA公钥对应的Keccak哈(ha)希值最右边的160位。2022以太坊地址是怎么来(lai)的 以太坊地址生成过(guo)程-大连信息网

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

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

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

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

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

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

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

4。取十六进(jin)制字符串的最后40个字母,并在(zai)开头添加0x作为地址。2022以太坊地址是怎么来的 以(yi)太坊地址生成过程-第8张图片-大连信息网(wang)以太坊地址生成示例

生(sheng)成以太坊地址的过程示例数据:私钥:1 F2 b 77 E3 a 450120692912 c 94b 204540 ad 4404386 b 10 c 615786 a 7 efaa 065d 20公钥: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 '

私钥生成公钥

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

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

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

$ brew安装bx

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

$ 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包生成公钥使用点(dian)走吧安装:

$ pip安装秒256 k1

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

导入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

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

$ pip安装pycrypt方法(fa)

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

来自加密。散列导入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'

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

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

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

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尚力财经(jing)小编 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 }

参考资料以太(tai)坊在线地址生成工具:可以作(zuo)为以太坊靓号地址生成(cheng)工具,代码开源:https://github.com/bokub/vanity-eth。https://pycryptodome.readthedocs.io/en/latest/src/hash/keccak.html:Keccak python 工具。https://github.com/ctz/keccak:Python2 环境(jing)下使用的 Keccak,此为源代码,需要自(zi)己 clone 在本地使用。https://github.com/ludbb/secp256k1-py:secp256k1 的 Python 库。以上就是以太坊(fang)地址是怎么来的 以太坊(fang)地址生成过程的(de)详细内容,更多关于以太(tai)坊地址知识分享的资料请关注尚(shang)力财经其它相关文章(zhang)!

上一篇:开机黑屏但(dan)电脑一直在运行(电脑一打开就黑屏怎么回事)

下一篇:全国最好吃的(de)红薯10个品种(西瓜红红薯特点)

  • 合约套(tao)利(合约套利机器人)

    合约套(tao)利(合约套利机器人)

    币圈合约稳定套利(li)的方法套利(spreads):指同时买进和卖(mai)出两张不同种类的(de)期货合约.交易者买进(jin)自认为是便宜的合约,同时卖出那些高价的合约,从两合约价格间的变动关系中获.套期(qi)保值,是指企业为(we…
    2023-06-11 阅读(41)
  • 寂寞组词(ci)是什么(寂寞组词是什么意思)

    寂寞组词(ci)是什么(寂寞组词是什么意思)

    参考答案:一、看拼音写词语。(商店)(决定)(夫人)(完美)(终点)(交换)(定期)(蹲下(xia))(罩子)(照顾)二、给加点字选择正确的读音(yin),在上面打“√”。决(jue)(jué)定泄露(lòu)颈(jǐng)联露水(shui)lù)三、比一比,再组词。决(决定(ding))定…
    2023-06-11 阅读(48)
  • 德国法院叫你(ni)HODL!裁定持有加密货币超过1年可免税

    德国法院叫你(ni)HODL!裁定持有加密货币超过1年可免税

    注册下载,立(li)即领取价值高达60,000元数字货(huo)币盲盒据Cryptoslate报导,一名德国原告(gao)最近试图在一场诉讼中主张,他(ta)投资加密货币所得的360万(wan)美元利润不算应纳税所得,而是(shi)构成一个「数据集」,但德国…
    2023-06-11 阅读(55)
  • 手机上的(de)歌曲怎么下载到u盘(手机上的歌曲怎么下载到u盘OPPO)

    手机上的(de)歌曲怎么下载到u盘(手机上的歌曲怎么下载到u盘OPPO)

    现在车载U盘已经成了车(che)载听歌必不可少的利器了,但是(shi)U盘的歌曲总有听厌的时候,如果想(xiang)要更换歌曲使用电脑是最(zui)简单方便的,但是很多车(che)友可能没有电脑。但(dan)是我们有手机啊,下面(mian)我们来学…
    2023-06-11 阅读(49)
  • 2022XT交(jiao)易所提现速度慢吗?XT交易所提现教程

    2022XT交(jiao)易所提现速度慢吗?XT交易所提现教程

    在今年的(de)10月XT币价(jia)格上涨了17.88%,这让投资者(zhe)不得不关注一下XT币(bi)背后的平台——XT交易所,据了解,XT交易所是全球首家社交化的(de)交易所,注重安全(quan)交易的同时更注重社交,方便了用(yong)户之间交流…
    2023-06-11 阅读(41)