一个比特币地址的生成过程
第一步,选取一个随机数做为种子参数。各种钱包在生成地址时如果没有让你主动输入,则一般会生成一个伪随机数。有些人性化的会让你输入,或者随便拍照通过计算随便生成随机数。
比如随便输入123er(作为举例,正常使用肯定不会这么简单)
第二步,将种子参数进行sha256计算得到一个值。
比如123er经过sha256计算后的结果是:
D29F1580F3F5EAED836735A6A4816BAF08015D494130AD3CF136CBA64789AFFB
sha256简单来说是一种通用的加密算法,主要利用它两个特性:
一个特性的计算结果唯一且标准化。无论种子参数是什么乱七八糟的东西,通过sha256计算后都可以得到一个标准固定的值——一个256位的2进制的数字。以上结果其实是一个换算成16进制的64位的数字。
它的十进制值是95266775299024212207916032084754227821110411626170030757390176856791208013819(这一段是无意义内容)
另一个特性就是无法反向计算。但是因为结果固定且唯一,所以很多可以通过不断计算保存结果的方式,得到大部分常见人工输入的普通密码级别的sha256反向计算,这也是一些所谓sha256破解网站的办法。
不如以上sha256结果就可以反向计算得到123er。
第三步,将上一步的值进行规范化得到比特币私钥
比特币私钥采用base58规范化编码,即把以上数值通过特定的办法转化为由排除了“0OIl”的数字和大小写字母的字符串,这就是比特币的私钥。
没有压缩的以数字5开头,压缩的以K或L开头。
如上一步案例可得比特币私钥
L4H8aHssVVDUR3kGWyiqTt9JgDVY6sFdmXbEcHENdPmrdn6eazq1因为只是规范化编码,所以这一步和上一步的两个结果是可互相逆算的。
第四步,私钥单向计算出公钥
私钥会进行两次组合的椭圆曲线计算,再用sha256计算得到一个规范化的结果,做为公钥。上例可得比特币公钥:
66520C952293B96F8B2FE228A322194ADFCB81BE
椭圆曲线和sha256都是非常复杂的单向计算,这一步是确保整个计算过程都是单向的,只能从私钥计算公钥,公钥无法计算私钥。
最后,讲公钥规范化得到比特币地址
和第三步一样,也是采用base58规范化编码,即把公钥用特定的办法转化为比特币的地址。公钥和地址之间可以互相逆算。
本例生成的比特币地址为:
1AL2DSceW5hG35njFxM7mkZLuwbQ7v3zdQ这就是整个比特币地址生成的过程。
页:
[1]