Python本地酿造比特币私钥

 币世界-Python本地酿造比特币私钥

钱包软件日益成熟,用户数增加很快,但有个疑问一定困扰过你:凭什么说钱包软件自动生成的私钥是绝对随机、无法被暴力猜到的?

这个质疑很硬核,回答是:是否经历足够长的时间考验。

如果自动生成的私钥不随机,盗币事件早晚爬上头条,不过这几年,伪随机私钥被盗事件并未发生。

想想几轮暴涨,有多少黑客以每秒亿级的速度来暴力破解,你看完这句话的时候,全世界黑客已经试过几十亿的私钥了,但那么多的用户钱包里的币都很安全。

所以,从这个角度上说,主流钱包还都算经受住了考验。虽然数学上不存在绝对的真随机数,但就算是伪随机数,也伪得不厉害。

- 1 -

进一步的追问是:钱包随机生成的私钥为什么必然牢靠呢?

这个追问无法证实,只能证伪——任何人只能在某一地址的币被盗的那一刻证明对应的私钥不牢靠,而无法在被盗之前证明牢靠。

唯一的办法就是自己做私钥。

我们知道,私钥看起来是一串长到记不住的字符,但本质上是一个介于0-2^256(2的256次方)之间的整数。2^256是一个极大的数:

115792089237316195423570985008687907853269984665640564039457584007913129639936

也就是1.15×10^77

接近于宇宙中所有原子的数量(10^80个),任何人想要遍历一遍这些数字,至少需要烧掉一万亿个太阳的能量,也不太可能获得万亿分之一的机会。

不是太阳太小,而是数学太大。

如果我们能自己指定这个数,那么就能比一般人更深一层保护私钥。

比如,抛256次硬币,正面记1,反面记0,那么原汁原味的私钥就是一个二进制数:

0011101000010111100010101101010111001011111111011010000001111101111011010001010011110100011001011100100011011000101010011000111101011111101101111011100001110100100100011010100111101110001111001011100010001000010111100101111000110111110010100101100011101110

但这个私钥并无法直接导入主流钱包,转换成这样的形式:

KyAdjFHRghuF7HWgLEew4odTWCiifKDvcXf2QEtvHdQbk7BZpe6q

那么,要找个趁手的工具,因为手算手会酸。人生苦短,人人用Python。

- 2 -

Python是个开源软件,代码全公开,现在一般都用Python3,安装好后,Windows用户启用Python的IDLE:

币世界-Python本地酿造比特币私钥

也可以下载Anaconda3,使用其中的Spyder:

币世界-Python本地酿造比特币私钥

手把手教学前,需要提前在命令行安装bitcoin模块:

Windows用户左下角“开始”,搜索“cmd”调出命令行,输入:pip install bitcoin,下载模块:(Mac用户直接在命令行中输入)

币世界-Python本地酿造比特币私钥

先在控制台中导入bitcoin模块:

import bitcoin

进而,输入三行代码就能土法泡制私钥。

注意,最好在断网环境下输入代码,因为你无法保证信息不外流。

第一行,输入二进制私钥k_2(注意,二进制数外面要套英文引号):

k_2='0011101000010111100010101101010111001011111111011010000001111101111011010001010011110100011001011100100011011000101010011000111101011111101101111011100001110100100100011010100111101110001111001011100010001000010111100101111000110111110010100101100011101110'

第二行,将二进制私钥转换成十进制私钥k_10:

k_10=int('0b'+str(k_2),2)

注:‘0b’代表是二进制数,Python中int函数是将其他进制转换成十进制。

第三行:将十进制私钥转换成WIF压缩格式的私钥k,也就是钱包能用的格式:

k = bitcoin.encode_privkey(k_10, 'wif_compressed')

实盘运行效果如下:

币世界-Python本地酿造比特币私钥

- 3 -

在私钥产生的同时,公钥和地址也几乎同步产生,我们只需输入两行代码:

公钥K:

K = bitcoin.privkey_to_pubkey(k)

地址A:

A = bitcoin.pubkey_to_address(K)

跑代码效果:

币世界-Python本地酿造比特币私钥

当然,你也可以把这些代码写在一个.py文件里:

币世界-Python本地酿造比特币私钥

在第二行写入你亲自抛硬币得出来的二进制私钥,按下F5,你会听到一阵风:

币世界-Python本地酿造比特币私钥

私钥和地址就都自动出来了。

再次提醒需在断网环境操作,确保绝对安全。


最后,可试着将私钥导入钱包,地址自动浮现:

币世界-Python本地酿造比特币私钥

Python本地酿造比特币私钥

扫一扫手机访问

Python本地酿造比特币私钥

发表评论