想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

比特币地址
这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于中本聪。比特币地址是完全公开的,如果你想要给某个人发送币,只需要知道他的地址就可以了。但是,地址(尽管地址也是独一无二的)并不是用来证明你是一个“钱包”所有者的信物。实际上,所谓的地址,只不过是将公钥表示成人类可读的形式而已,因为原生的公钥人类很难阅读。在比特币中,你的身份(identity)就是一对(或者多对)保存在你的电脑(或者你能够获取到的地方)上的公钥(public key)和私钥(private key)。比特币基于一些加密算法的组合来创建这些密钥,并且保证了在这个世界上没有其他人能够取走你的币,除非拿到你的密钥。下面,让我们来讨论一下这些算法到底是什么。
公钥加密
公钥加密(public-key cryptography)算法使用的是成对的密钥:公钥和私钥。公钥并不是敏感信息,可以告诉其他人。但是,私钥绝对不能告诉其他人:只有所有者(owner)才能知道私钥,能够识别,鉴定和证明所有者身份的就是私钥。在加密货币的世界中,你的私钥代表的就是你,私钥就是一切。
本质上,比特币钱包也只不过是这样的密钥对而已。当你安装一个钱包应用,或是使用一个比特币客户端来生成一个新地址时,它就会为你生成一对密钥。在比特币中,谁拥有了私钥,谁就可以控制所以发送到这个公钥的币。
私钥和公钥只不过是随机的字节序列,因此它们无法在屏幕上打印,人类也无法通过肉眼去读取。这就是为什么比特币使用了一个转换算法,将公钥转化为一个人类可读的字符串(也就是我们看到的地址)。
如果你用过比特币钱包应用,很可能它会为你生成一个助记符。这样的助记符可以用来替代私钥,并且可以被用于生成私钥。BIP-039 已经实现了这个机制。
好了,现在我们已经知道了在比特币中证明用户身份的是私钥。那么,比特币如何检查交易输出(和存储在里面的币)的所有权呢?
数字签名
在数学和密码学中,有一个数字签名(digital signature)的概念,算法可以保证:
当数据从发送方传送到接收方时,数据不会被修改;
数据由某一确定的发送方创建;
发送方无法否认发送过数据这一事实。
通过在数据上应用签名算法(也就是对数据进行签名),你就可以得到一个签名,这个签名晚些时候会被验证。生成数字签名需要一个私钥,而验证签名需要一个公钥。签名有点类似于印章,比方说我做了一幅画,完了用印章一盖,就说明了这幅画是我的作品。给数据生成签名,就是给数据盖了章。
为了对数据进行签名,我们需要下面两样东西:
1.要签名的数据
2.私钥
应用签名算法可以生成一个签名,并且这个签名会被存储在交易输入中。为了对一个签名进行验证,我们需要以下三样东西:
1.被签名的数据
2.签名
3.公钥
简单来说,验证过程可以被描述为:检查签名是由被签名数据加上私钥得来,并且公钥恰好是由该私钥生成。

用 Go 构建一个区块链 -- Part 5: 地址 1相关推荐

  1. 用Go 构建一个区块链 -- Part 5: 地址

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.这 ...

  2. 用 Go 构建一个区块链 -- Part 5: 地址

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  3. 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...

  4. php构建一个区块链(含源码)

    php构建一个区块链(含源码) 我们要用PHP编程语言构建区块链,区块链本身就是一个非常简单的概念,它是一个非常简单的数据结构,数字货币是很复杂,但区块链不是,它们复杂的原因是共识算法,挖矿机制和运行 ...

  5. 用 Go 构建一个区块链 -- Part 7: 网络

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  6. 用 Go 构建一个区块链 -- Part 6: 交易(2)

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  7. 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  8. 用 Go 构建一个区块链 ---- Part 1: 基本原型

    翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了.如果想直接运行代码,也可以 clone GitHub ...

  9. 用 Go 构建一个区块链 -- Part 1: 基本原型

    引言 区块链是 21 世纪最具革命性的技术之一,它仍然处于不断成长的阶段,而且还有很多潜力尚未显现出来. 本质上,区块链只是一个分布式数据库而已. 不过,使它独一无二的是,区块链是一个公开的数据库,而 ...

最新文章

  1. pandas.core.frame.DataFrame是什么数据结构,为什么要如此取值  [ ]中嵌套[ ]
  2. 科普|深度解析5G与未来天线技术
  3. HDU2018 母牛的故事
  4. VS2008资源问题解决方法
  5. windows 下怎样利用NET-SNMP 发送和接收trap
  6. NOI[2001]食物链
  7. 动态区间第k小:树状数组套权值线段树
  8. JavaScript Iframe富文本编辑器中的光标定位
  9. 多线程导出excel高并发_大牛带你深入java多线程与高并发:JMH与Disruptor,确定能学会?...
  10. 如何拿到半数面试公司Offer——我的Python求职之路
  11. oracle成本抛转,抛砖引玉:CBO成本计算初探
  12. 使用bind构建本地简易dns服务器
  13. 就等android了
  14. 目录_计算机视觉——算法及应用
  15. 数据结构c语言版严蔚敏第二版课后答案
  16. (转)Windows 批处理(bat)语法大全
  17. 大数据本质是什么,基础理论应该怎么理解?
  18. android版youtube最新版下载,youtube安卓版
  19. 计算机用户接入广域网的技术,广域网接入技术
  20. 基于[三星6818]I2C驱动开发的0.96寸oled屏

热门文章

  1. 云计算背后的秘密(3)-BigTable
  2. 修改 pip 下载源
  3. 都在抢论文第一作者,如何处理?
  4. 转载:opencv错误rect错误
  5. rsatool使用步骤图解_图解360系统重装大师如何使用
  6. 北斗导航 | 卫星导航基础知识(坐标系)
  7. 频谱分析:基于python画出时域频域波形
  8. 样机模型尺寸怎么改_土耳其五代机全尺寸样机模型首次亮相巴黎航展,这不是玩票,是一架认真设计的五代机!...
  9. 科学计算机要用的电池是几号,科学计算器的常识及注意事项
  10. 用python定位手机_使用Python定位android和iphone