他是中本聪?为什么连简单的消息签名都不用?

开发 开发工具
数字签名使用椭圆曲线数字签名算法(ECDSA),算法非常复杂,普通用户不必掌握其算法的细节,但你只要掌握了Bitcoin Core钱包软件或类似工具,也可以非常轻松地生成签名或验证签名。

 比特币系统中可以给一串消息进行数字签名,有三个作用:

  • 证明你拥有某笔资金的私钥
  • 该证明是无可争辩的、不可抵赖的
  • 签名后的交易没有被其他人修改过

数字签名使用椭圆曲线数字签名算法(ECDSA),算法非常复杂,普通用户不必掌握其算法的细节,但你只要掌握了Bitcoin Core钱包软件或类似工具,也可以非常轻松地生成签名或验证签名。

[[258229]]

生成签名

在Bitcoin Core软件的“文件”菜单下,点击“消息签名”菜单项,弹出一个对话框。分别填写比特币地址,消息文本,点击“消息签名”按钮,则会在底部的签名区出现一行文本,这段文本可以证明你拥有那个比特币地址、那段消息是完整的、没有被修改过一个字,这个证明谁都可以验证、不可抵赖。

 

验证签名

在Bitcoin Core软件的“文件”菜单下,点击“验证消息”菜单项,弹出一个对话框。分别填写比特币地址、消息文本、签名文本,点击“验证消息签名”按钮,则会出现是否验证成功的提示。

 

没有安装Bitcoin Core软件也没关系,很多网站都提供了验证签名的工具。比如:https://blockexplorer.com/messages/verify

 

再比如这个网站:

https://bitcotools.com/verify-messages

 

下面这个网址中列举了几十种签名方法:

https://bitcointalk.org/index.php?topic=990345.0

截图上文字显示得不全,我的完整消息签名是:

  • H0UP22YwxdZ0EyetmIoY72w/v1QGQiSk2vAf6jViHlw/DBC+76775pFqxGclbrkny4D40bVWe9nPLgl/MMWQyZs=

在NBitcoin 中进行消息签名用2个函数就可以搞定,非常方便:

  • 生成签名文本用 key.SignMessage(msg)
  • 验证签名用 addr.VerifyMessage(msg, sig)

就这样简单,完整源代码:

  1. // 用私钥给一个消息进行签名 
  2. var msg = "我拥有这个地址的私钥:17mKugcBDEJbu391Fq41AdwLeGHwJLPRDf"
  3. string priv = "3243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C8"
  4. Key k = new Key(Encoders.Hex.DecodeData(priv), -1, false); // 非压缩密钥 
  5. var sig = k.SignMessage(msg); 
  6. Console.WriteLine(sig); 
  7. // 结果: 
  8. // G2HBHn+ZmgTNtCnxMbgWf4nbXcTjB 
  9. // KFvy3am3UWcxdA0TD3MDdpqaZgEoY 
  10. // PsvbhR +OSZkR9hSp/rrO3nErlzBjY= 
  11.  
  12. // 验证一个签名 
  13. var addr = new BitcoinPubKeyAddress("17mKugcBDEJbu391Fq41AdwLeGHwJLPRDf"); 
  14. Console.WriteLine(addr.VerifyMessage(msg, sig)); 
  15.  
  16. // 验证我以前用Bitcoin Core做过的一个签名 
  17. var addr2 = new BitcoinPubKeyAddress("12j75TnvVhEVxk3fiaPSy3w4FVfjsKbKZm"); 
  18. var msg2 = "申龙斌的程序人生"
  19. var sig2 = "H0UP22YwxdZ0EyetmIoY72w/v1QGQiSk2vAf6jViHlw/DBC+76775pFqxGclbrkny4D40bVWe9nPLgl/MMWQyZs="
  20. Console.WriteLine(addr2.VerifyMessage(msg2, sig2)); 

Craig Steven Wright(CSW)一直声称他就是中本聪,为什么不拿创世区块中的比特币地址(1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)对一段消息进行签名?

[[258230]]

 

看来澳本聪就是一个骗子。

【本文为51CTO专栏作者“申龙斌”的原创稿件,转载可通过作者微信公众号(申龙斌的程序人生)获取联系】

 

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2024-11-04 09:26:42

RESTJavaAPI

2020-06-22 08:16:16

哈希hashCodeequals

2011-06-15 09:59:09

Xserve苹果服务器

2021-09-06 08:59:00

程序员技能开发

2020-09-25 08:10:55

Rust系统编程

2021-11-18 11:23:09

微信WhatsAppAPP

2023-06-06 09:03:06

InnodbMySQL

2014-09-09 16:44:16

2020-06-19 14:55:11

Kubernetes容器技术

2011-09-01 16:11:43

ubuntu消息菜单

2017-12-15 14:10:20

深度学习本质边缘识别

2019-03-11 08:36:11

Python代码Flask

2020-05-06 22:43:09

笔记本塑料机身铝镁合金

2013-11-29 13:14:30

代码网页设计

2015-02-26 15:06:52

思科

2021-05-06 06:53:39

DockerGoogleFacebook

2009-05-11 11:30:26

面试官程序员求职

2015-10-12 08:56:27

Java不可变

2020-06-16 14:52:41

面试官模型递归

2012-08-14 10:15:46

程序员
点赞
收藏

51CTO技术栈公众号