区块链之公钥、私钥、地址之间的关系_weixin_33670713的博客-程序员宅基地

技术标签: 区块链  

一句话解释公钥、私钥、地址
私钥:实际上是一组随机数,关于区块链中的 随机数我们已经介绍过了
公钥:对私钥进行椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。
地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址

具体过程:

  1. 首先使用随机数发生器生成一个『私钥』。后续的公钥、地址都会由私钥生成,所以一句话概括私钥的重要性:"谁掌握了私钥, 谁就掌握了该钱包的使用权!"
  2. 『私钥』经过椭圆曲线算法(SECP256K1)算法加密生成了'公钥'。这是一种非对称单向加密算法,知道私钥可以算出公钥,但知道公钥却无法反向算出私钥

  1. 『公钥』经过单向Hash算法(SHA256、RIPEMD160)生成『公钥Hash』
  2. 将一个字节的地址版本号连接到『公钥哈希』头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为『公钥哈希』的校验值,连接在其尾部。
  3. 将上一步结果使用BASE58进行编码(比特币定制版本),就得到了『钱包地址』。

『私钥』『公钥』『钱包地址』间的关系
  在上述的五个步骤里只有“BASE58编码”有相应的可逆算法(“BASE58解码”),其他算法都是不可逆的,所以这些数据之间的关系可以表示为:

可以看出:通过『私钥』可以得到上述计算过程中所有的值。『公钥哈希』和『钱包地址』可以通过互逆运算进行转换,所以它们是等价的。

使用『私钥』对交易进行签名
比特币钱包间的转账是通过交易(Transaction)实现的。交易数据是由转出钱包『私钥』的所有者生成,也就是说有了『私钥』就可以花费该钱包的比特币余额。生成交易的过程如下:

  1. 交易的原始数据包括“转账数额”和“转入钱包地址”,但是仅有这些是不够的,因为无法证明交易的生成者对“转出钱包地址”余额有动用的权利。所以需要用『私钥』对原始数据进行签名。
  2. 生成“转出钱包公钥”,这一过程与生成『钱包地址』的第2步是一样的。
  3. 将“转出签名”和“转出公钥”添加到原始交易数据中,生成了正式的交易数据,这样它就可以被广播到比特币网络进行转账了。

使用『公钥』对签名进行验证

交易数据被广播到比特币网络后,节点会对这个交易数据进行检验,其中就包括对签名的校验。如果校验正确,那么这笔余额就成功地从“转出钱包”转移到“转入钱包”了。



欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址: http://www.jouypub.com
简书主页: https://www.jianshu.com/u/756c9c8ae984
segmentfault主页: https://segmentfault.com/blog/jouypub
腾讯云主页: https://cloud.tencent.com/developer/column/72548
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33670713/article/details/88751960

智能推荐

warning: #188-D: enumerated type mixed with another type_ZL.zheng的博客-程序员宅基地

warning: #188-D: enumerated type mixed with another type警告:#188-D:枚举类型与另一类型混合出现这个警告是变量类型不匹配的问题。我用函数封装去使能nvic中断,变量转换过程导致。原本是这样:强制类型转换成枚举类型就好了。..._enumerated type mixed with another type

Mina自定义文本编码-程序员宅基地

为什么80%的码农都做不了架构师?>>> ...

谷歌手机模式调试没有鼠标,显卡设置没有“量化范围”-程序员宅基地

懒得跟大家扯什么F12,手机调试这些了,相信你遇到这个问题,你肯定是程序员。话不多说直接上图。https://blog.csdn.net/howinfun/article/details/81111579这是现有的,答案比较多的一种解法。但是我笔记本没有所谓的亮化范围,那怎么办?看下面!!!!1:打开你的控制面板------>点击“鼠标”2:可见性------...

14 个经典的Javascript代码_js最具代表的-程序员宅基地

抄录于:http://www.52sheji.com/Article/zhizuo/Java/200504/Article_82.html■打开■ ■另存为■ ■属性■ ■打印■ ■页面设置■ ■刷新■ ■导入收藏■ ■导出收藏■ ■加入收藏■ ■整理收藏夹■ ■查看原文件■ ■语言设置■ ■前进■ ■后退■ _js最具代表的

Linux设备模型_platform设备_linux设备模型platform设备-程序员宅基地

Linux设备模型(8)_platform设备 存档,转载于:http://www.wowotech.NET/linux_kenrel/platform_device.html1. 前言 在Linux设备模型的抽象中,存在着一类称作“Platform Device”的设备,内核是这样描述它们的(Documentation/driver-model/_linux设备模型platform设备

页面刷新后导航不变_网址更新,但导航栏不刷新-程序员宅基地

写导航页的时候,发现刷新一下选中的导航样式就会没有了,所以需要进行处理。 方案: 用sessionStorage对当前选中的导航页索引进行保存,刷新页面后再从sessionStorage里面取出并设置要选中的导航样式。

随便推点

Java File ,byte[] , 二进制字符串之间互转_file转byte[]-程序员宅基地

File ,byte[] , 二进制字符串之间互转的多种方法汇集 /** * File转Byte[] 方法一 * @param file * @return */ public static byte[] fileToBinArray(File file){ try { InputStream fis ..._file转byte[]

在python虚拟环境中安装pywin32-程序员宅基地

在python虚拟环境中安装pywin32 下载和安装pywin321.下载与python对应python 32位的版本下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/下载完按提示安装即可2.如果下载成64位或者版本不同往往会出现报错:Python..._pywin32安装后需要配置什么文件

使用mkfs在Linux中创建文件系统-程序员宅基地

File systems are the main component of operating systems. File systems provide the required infrastructure for holding data permanently operating system level. Linux supports diverse types of file sys..._linux用mkfs创建文件系统

redhat 6.4 安装oracle 12c RAC_redhat6+oracle12crac安装-程序员宅基地

1、华为存储通过SAN网络连接到HBA卡,安装华为UltraPath驱动,将LUN映射到/dev/sdb2、基本环境设置export LANG=zh_CN.GB2312export LC_ALL=zh_CN.GB2312export LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8cat >>~/.bashrc<

kubernetes-kubelet进程源码分析(三)_kubernetes livenessprobe 源码-程序员宅基地

接着上篇博文,我们继续分析kubelet进程的另一个重要功能是如何实现的:定期同步Pod状态信息到API sever。先来看看Pod状态的数据结构定义:Pod的状态又5种:运行中(PodRunning)、等待中(PodPending)、正常终止(PodSucceeded)、异常停止(PodFailed)及未知状态(PodUnknown),最后一种状态很可能是由于Pod所在主机的通信..._kubernetes livenessprobe 源码

SD卡协议详解_tran_speed取值含义 sd卡_1_Can的博客-程序员宅基地

Overview深入理解SD卡系列文章将介绍SD卡,涉及SD卡的协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它,最终解决工作中遇到的SD卡相关的问题。本系列文章的目标是理解SD,包括协议和驱动代码。在学习任何设备驱动时,有个东西我们是无法绕过的,那就是协议,本文讲的就是SD卡的协议。学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只需要对SD卡的协议有个大概了解,能基本满足我们看懂SD卡驱动代码就行。如果之后在阅读SD卡驱动代码有不理解的地方,可_tran_speed取值含义 sd卡

推荐文章

热门文章

相关标签