Python中国社区  »  区块链

用NBitcoin进行区块链开发(2)

申龙斌的程序人生 • 2 周前 • 17 次点击  

请参考以下文章一起阅读:


本文尝试用NBitcoin源代码详细解释下面这幅图的含义。

插图取自《精通比特币》


首先介绍NBitcoin里的一个Encoders工具类,它处于NBitcoin.DataEncoders名字空间内,有两个函数可以把十六进制字符串和字节数组相互转换。

  • Encoders.Hex.DecodeData()

  • Encoders.Hex.EncodeData()


这两个函数可以方便进行SHA256运算和打印输出。



公钥哈希


先回顾一个公钥的组成:

022e88d239fb78cee0c1c55943a96dcc8b70adf47e18b53f9ba110b6fb871e1f8b  

前面的02表示压缩公钥,后面的一长串十六进制数表示椭圆曲线上点的X坐标。


公钥再经过SHA256和RIPEMD160变换之后,得到20个字节的公钥哈希。


在NBitcoin.Crypto名字空间中有一个Hashes类,可以完成这些哈希操作,最后得到的结果与pk.Hash是一样的。

输出结果:




比特币地址


公钥哈希前面加上版本号,后面加上校验码,再经过Base58编码,就是比特币地址。

直接看代码:

刚才的加上了版本号的公钥哈希经过两次SHA256之后,取前4个字节作为校验码,就得到了:

006168f1c0384241c4f6185171df8e800def5e63f10749c64b

再经过Base58编码,就得到了比特币地址。

与pk.GetAddress()函数的结果一样。


参考文献:

https://www.codeproject.com/Articles/768412/NBitcoin-The-most-complete-Bitcoin-port-Part-Crypt


--- END ---



以前精彩文章:



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/wW6EgBdLCt
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27075
 
17 次点击  
分享到微博