主页 > 新闻 > 科技 怎样用比特币私钥创建以太坊地址

怎样用比特币私钥创建以太坊地址

文章来源:网络整理

比特币私钥,以太坊地址

2018-12-27 08:59

区块链的钱包中,私钥可以产生出公钥,而反过来要想从公钥推算出私钥则是不年夜概的。用公钥加密的信息可以用私钥来解密,而用私钥署名的信息则由公钥来验证,验证经由过程后才能证明该信息确实为私钥持有人所发布。以BTC为例的话,在这个过程中最重要的角色的便是“椭圆曲线加密算法”。

有些人会觉得BTC跟ETH是不同的链所以用的椭圆曲线并不相同,但事实上两个链利用的都是相同的secp256k1曲线,所以获得公钥的方式完全一样,差别在从公钥生成地址的过程,接下来我们会先先容怎样平安的生成私钥,然后说明ETH怎样从地址验证由私钥生成的公钥。


Vitalik曾经在Ethereum Community Forum上回复过为何不利用其他曲线

以下清算自 Timur Badretdinov 在 freeCodeCamp 上的一系列文章。

私钥的规格

secp256k1曲线上点的个数约有2²⁵⁶个,每个点可由一组256位代表,而256位正好是32个位元组,所以我们需要提供这个曲线算法32个位元组的数据。并且因为我们利用ECDSA,密钥必须是正数且小于该曲线。

换句话说,BTC及ETH的私钥都是一组32字节的字串,但它也可以是二进制字串、Base64字串、WIF密钥、助记码(mnemonic phrase)、十六进制字串。


相同的私钥,以不同的格式编写。

平安的私钥生成

既然都知道他们利用的是同一条曲线,那我们实在就可以利用BTC社群比较信任的bitaddress.org来生成我们的私钥,(用MEW或Metamask也都是不错的选择,至少他可以不是一串裸露在外的私钥),但要是有精采平安意识的话,我们甚至不应该用浏览器来生成我们重要的私钥,所以我们将用python设计一个更简单的bitaddress。

bitaddress.org提供了WIF格式的私钥

相识Bitaddress原理

Bitaddress做了三件事情。起首,初始化字节数组,然后尝试从利用者的电脑获得尽年夜概多的熵,凭证利用者的输入填满数组,最后生成私钥。

Bitaddress利用256字节的数组来存储熵。这个数组是被轮回复写的,中杉数字货币,所以当数组第一次填满时,索引变为零,然后复写过程再次起头。

程式从window.crypto生成一个256字节的数组。然后写入一个时间戳来获得4个位元组的熵。在这之后,它获得一些其他的数据包括屏幕巨细,时区,浏览器扩充套件,区域等。来获得其它6个字节。

初始化后,利用者持续输入来复写初始字节。当移动光标时,程序会写入光标的位置。当按下按钮时,程序会写入按下的按钮的字元代码。

最后,bitaddress利用累积的熵来生成私钥。bitaddress利用名为ARC4的RNG算法。用当前时间以及收集的熵初始化ARC4,然后逐个取得字节,总共取32次。

初始化我们自己的种子池

我们从加密RNG和时间戳中写入一些字节。__seed_int以及__seed_byte是将熵插入池的数组中的两个函式,数字货币论坛,而我们利用secrets生成我们的随机数。

def __init_pool(self):

for i in range(self.POOL_SIZE):

random_byte = secrets.randbits(8)

self.__seed_byte(random_byte)

time_int = int(time.time())

self.__seed_int(time_int)

def __seed_int(self, n):

self.__seed_byte(n)

self.__seed_byte(n >> 8)

self.__seed_byte(n >> 16)

self.__seed_byte(n >> 24)

def __seed_byte(self, n):

self.pool[self.pool_pointer] ^= n & 255

self.pool_pointer += 1

if self.pool_pointer >= self.POOL_SIZE:

self.pool_pointer = 0

由输入填充种子池

这里我们先写入一个时间戳,然后写入利用者输入的字串。

def seed_input(self, str_input):

    time_int = int(time.time())

    self.__seed_int(time_int)

    for char in str_input:

        char_code = ord(char)

        self.__seed_byte(char_code)

生成私钥



数字货币大全 数字货币排行榜 资讯 专栏 交易平台 专栏

Copyright © 2018 数字币100强-数字币排行榜 版权所有