公钥私钥原理是什么?
在比特币的区块链网路中,使用者将会拿到一组公钥私钥对,顾名思义公钥可以被区块链网路中的所有使用者看到,私钥则仅由自身保管不能让对方知道,而所有的交易与签章都是透过使用者手上的私钥来加密,这组钥匙其实就相当于比特币网路中的身份。

而比特币中的钱包存放公私钥,并透过这对钥匙的数字签名(digital signature)证明资产中的所有权。在比特币中,钱包透过数字签名附加到交易中,使确保交易的来源没有被冒充,而交易皆以钱包中的私钥当作拥有里面虚拟货币的证明,换句话说若是弄丢了私钥或是被别人偷走了私钥将会永远失去里面的钱,因此在私钥的产生与型式我们会再后面继续介绍。
![]() |
![]() |
区块链私钥如何产生的?
其中私钥在比特币中是一个32bytes的数列(1 bytes = 8 bits ,因此32bytes的数列相当于256bits的数列( 0或者1 ) ),随机数本身事由具加密安全的数字产生器取得的,在bitcoin中钱包通常在创立帐号时都会随机生成一个私钥给你,而私钥应该要满足一些特性:
- 要确保生成的钥匙只有你自己知道
- 钥匙要在确保安全性的情况下随机生成
区块链公钥私钥的范例及原理
先让我们看看私钥长什么样子:

Python – 生成用于密码层级的乱数
我们可以用Python提供的secrets模组非常简单的生成自己的私钥

(* secrets只支持python3.6以上的版本)
我们可以简单随机生成一个私钥,分别为2进制的表示和16进制的表示方式(皆为同一个Key)

虽然相同的功能在random的模组中也可以达到,但是安全性上会有疑虑,在random的官方文件中也有标示不要将random模组用于密码相关的领域。
将公钥和私钥透过乱数网站生成
这里也有提供相关的乱数生成器的网站,其中一个是random.org,但使用上会有两个疑虑,第一个是使用上是否有达到乱数的效果,第二个则是当我们在网路上生成的Key会不会有机会被他人看到。而借到的另一个网站则是bitaddress.org这个网站就是设计给bitcoin使用的,这个网站优点在于他是开源的程式,可以清楚看到程式内的架构,并且可以下载到电脑中,不使用网路也能生成私钥,用以确保生成的过程中有人偷看。

什么是WIF? 认识区块链中私钥编码格式
WIF格式是为了将生成的私钥编码成较为容易复制的模式,下面是由私钥转为WIF格式的流程:
1、首先先取得一个私钥(以16进制为例)

2、加入0x80 byte 放再我们的私钥前面

3、先做一次SHA256

4、再做一次SHA256

5、取前面4个bytes(再十六进制因此是取八位)

6、将步骤五的结果叠在步骤二的后面

7、经由Base58 解码得出结果


WIF的生成在TP's Go Bitcoin Tests – Private Key中有测试程式可以去尝试尝试生成的流程喔
本文链接地址:https://www.wwsww.cn/jishu/1384.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。