比特币非对称加密发送过程

首先我作为发送方,我拥有:

  • 付款地址(公钥):“1FKDZ3s2H787sa”
  • 私钥:“2SYFs2SU89H8YH”

Hash ( Hash ( func ( 私钥“2SY...” ) ) ) -> 付款地址"1FKDZ..."  (第一次哈希)

公钥和私钥是一对非对称关系,可以理解为用户名和密码的关系。

比特币交易流程

比特币的账户是用地址来表示,账本上不显示个人信息,转账是把比特币从一个地址转移到另一个地址。

例如一段交易信息记录:

{
"付款地址":"1FKDZ3s2H787sa"
"收款地址":"3SKC9CBa239aFcc"
"金额":"0.5btc"
}
只有拥有该付款地址的私钥的我才能支付该笔交易。


对交易信息签名

1.对交易信息哈系(第二次哈系)
hash('
{
"付款地址":"1FKDZ3s2H787sa"
"收款地址":"3SKC9CBa239aFcc"
"金额":"0.5btc"
}') -> 摘要信息(Hash值):4ZYzha97zhya8

2.签名
sign("摘要信息4ZY...",“私钥2SY...”) -> “签名“:5QMy6gF567F


验证

广播付款地址和签名后,验证返回交易摘要
verify("签名5QM...",”付款地址1FKDZ...”) -> "摘要信息"4ZY...
这是一次逆向算出交易信息的运算,把得出的摘要信息结果和第一次哈希的结果对比,获得验证结果:
if(verify("3cdferdadgadg", "2A39CBa2390FDe") ==
hash('{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金额":"0.2btc"}')) :

# 写入账本
# 广播

else:
# 不干活


补充:
  • 比特币加密算法:SHA256
  • 比特币系统使用了椭圆曲线签名算法,算法的私钥由32个字节随机数组成,通过私钥可以计算出公钥,公钥经过一序列哈希算法和编码算法得到比特币地址,地址也可以理解为公钥的摘要


猜你喜欢

转载自www.cnblogs.com/kumata/p/10081249.html
今日推荐