专栏名称: 区块链技术学习
致力于区块链技术的学习和普及,对区块链技术和相关企业事件进行深度分析和研判,探索去中心化账本技术应用领域。
目录
相关文章推荐
河北交通广播  ·  【992 | 热搜】演员王某被抓! ·  16 小时前  
河北交通广播  ·  突发!一高速桥梁坍塌,已致伤亡…… ·  20 小时前  
河北交通广播  ·  【992 | ... ·  昨天  
河北交通广播  ·  【992 | 祝贺】王曼昱夺冠! ·  2 天前  
河北交通广播  ·  大规模!特斯拉紧急召回37.5万辆车! ·  3 天前  
51好读  ›  专栏  ›  区块链技术学习

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

区块链技术学习  · 公众号  ·  · 2019-03-27 12:30

正文

来自:申龙斌的程序人生(微信号:slbGTD)

作者:申龙斌


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


1. 证明你拥有某笔资金的私钥

2. 该证明是无可争辩的、不可抵赖的

3. 签名后的交易没有被其他人修改过


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


生成签名


在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)


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


// 用私钥给一个消息进行签名
var msg = "我拥有这个地址的私钥:17mKugcBDEJbu391Fq41AdwLeGHwJLPRDf";
string priv = "3243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C8";
Key k = new Key(Encoders.Hex.DecodeData(priv), -1false); // 非压缩密钥
var sig = k.SignMessage(msg);
Console.WriteLine(sig);
// 结果:
// G2HBHn+ZmgTNtCnxMbgWf4nbXcTjB
// KFvy3am3UWcxdA0TD3MDdpqaZgEoY
// PsvbhR +OSZkR9hSp/rrO3nErlzBjY=

// 验证一个签名
var addr = new BitcoinPubKeyAddress("17mKugcBDEJbu391Fq41AdwLeGHwJLPRDf"






请到「今天看啥」查看全文


推荐文章
河北交通广播  ·  【992 | 热搜】演员王某被抓!
16 小时前
河北交通广播  ·  突发!一高速桥梁坍塌,已致伤亡……
20 小时前
河北交通广播  ·  【992 | 祝贺】王曼昱夺冠!
2 天前
河北交通广播  ·  大规模!特斯拉紧急召回37.5万辆车!
3 天前
治愈系心理学  ·  嫁不出去的姑娘
8 年前
杂学杂问  ·  杂学杂问 1月19日早读分享
8 年前
好奇小姐的好奇心  ·  连撸7次撸出血,看着都疼!
7 年前