网站首页 > 教程文章 正文
这是比特币中经常出现的三个词,那么他们分别是什么意思呢?他们之间又有什么样的关系呢?
先说说私钥,例如这样的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss,就是一个私钥。只要是正确支持比 特币协议的应用都可以把这段字符串识别为私钥,转换成公钥,再转换为地址,如果对应的地址上面有比特币,就可以使用这个私钥花费上面的比特币。公钥和地址 的生成都依赖私钥,所以私钥才是比特币世界里面最重要的,有了私钥就能生成公钥和地址,就能够花费对应地址上面的比特币。私钥花费比特币的方式就是对这个 私钥拥有的未花费的交易进行签名(加密)。
私钥本质上是32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两种可能性0或者1,所以私钥的总数就是 2^(8*32)=2^256个,这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥,耗尽整个太阳的能量也是不可能成功的。我们所说的比特币私钥 的是密码学上面安全的,并不是不可能出现重复的私钥,而是说不可能通过遍历所有的私钥方式,或者其它的方式,找到上面有比特币的私钥,所以私钥是密码学上 安全的。
私钥的总数量很大,但是私钥的生成却是要依赖随机,不依赖随机就会大大的降低生成私钥的概率空间,密码学上面安全的随机是指,是指随机是不可预 测的,随机的结果是不可遍历的。密码学上安全的随机生成的私钥才能用来存比特币,如果随机不安全,你得到的私钥有可能会和别人的相同,那么你的比特币就有 丢失的可能。
32个byte组成的数组是由256个0或者1组成的,如果显示出来,不仅仅是识别率太差,而且太长。因此私钥就会被转换成上面的样子,上面私 钥的样子是对32个byte的数组做了Base58的转换,Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的 钱包地址和私钥。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。主要就 是为了肉眼容易识别,在输入的时候不容易打错,不过我更倾向于使用二维码的方式扫描私钥,毕竟上面那段没有规律的字符串输入起来还是挺费劲的。
我们看到的私钥除了以5开头的以外,还有以”L”和”K”开头的私钥,为什么会出现这样的情况呢?5,L,K又带代表什么呢?关于这部分的内容就是说到公钥了。
公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成,一个私钥经过椭圆曲线变换之后会生成一个65个byte的数组,一般我们会看到这样 的一个公 钥:
04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235, 公钥一般是把byte数组是经过hex(16进制)的处理之后显示出来的,不同于私钥的Base58,公钥是用来解开私钥签名的数据,使用私钥签名交易之 后,会把自己的公钥一起发送,私钥签名的数据可以使用公钥解密,发送公钥之后旷工才能验证私钥的签名的正确性(能不能解开),私钥和公钥是成对出现的,一 个私钥签名的数据,只有对应的公钥才能解开,而地址也是从公钥生成的,这样就可以验证花费的交易是不是属于这个地址的。
至于为什么会出现5开头或者L,K开头的私钥,问题就是在公钥上面,例子中的私钥不仅仅包含了32个byte数组的信息,还是私钥 version的信息和公钥是否压缩的信息,早期的比特币开发者并不知道生成的公钥是可以压缩的,压缩的公钥只有33个byte,而未压缩的公钥有65个 byte。压缩的公钥对比特币的意义更大,因为比特币是去中心化的p2p加密货币,每个节点都会拥有完整的交易记录,除了coinbase(挖矿得到的比 特币)以外,每个交易都会发送公钥,支持压缩格式的公钥,交易数据就会减少32个字节,这对整个比特币网络是非常有意义的,整个比特币网络的数据就会因此 而减少不少。
而对私钥进行Base58编码的时候,支持未压缩公钥的私钥其实是33位byte数组,第一位存放版本信息,当前值为128。支持压缩公钥的私 钥是34位,同样是第一位是version信息,它的值也是128,而多出来的一位是最后一个byte是用来存放是否压缩信息,1就表示是支持压缩格式的 公钥,5开头的私钥都是不支持压缩格式的私钥,而L和K开头的都是支持压缩格式的私钥。
公钥是否压缩除了对私钥的显示有影响以外,还是地址有影响。地址是由公钥产生的,看到的地址都是Base58编码处理的,地址的生成比较复杂,说地址之前不得不先说下hash160,地址是由公钥生成的的,但是公钥生成地址的时候会先生成一个hash160。
生成的过程是,先对公钥做一次SHA256,再对得到的结果做一次RIPEMD160,再从结果中取20个byte的数组,这个得到的数组就是 得到的hash160,例如:
9a1c78a507689f6f54b847ad1cef1e614ee23f1e,在这个20位的byte数组前面再加 上一个byte,就是地址的version信息(当前为0)得到一个21位的byte数组,对它进行Base58转换就是我们看到的地址的样子,也就是说 hash160和是可以和地址相互转换的。
一个私钥可以有一个压缩的公钥,和一个未压缩的公钥,每个公钥都会生成一个地址,上面私钥就会有两个地址分别 为:
1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩公 钥),
1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥),这两个地址都是这一个私钥的地址,每个地址上面的钱都可以用 这个私钥花费。但是目前大多数的应用都是支持压缩格式的私钥。
这样就给大家简单的介绍了一个私钥,公钥和地址。
来源:比特帮
转载请注明:CoinIf中文网>>和大家谈谈什么是私钥,公钥和地址
- 上一篇: 加签/验签、加密/解密、公钥/私钥
- 下一篇: 加解密的艺术
猜你喜欢
- 2025-03-10 什么是钱包?私钥代表什么?
- 2025-03-10 密码狗的数据保护计算原理
- 2025-03-10 如何给数据安全性较高的应用程序加密和解码
- 2025-03-10 2个AI助手对话说着说着就“加密”了
- 2025-03-10 自己个人拥有一个可以支付功能的网站?当然可以了!保姆级演示!
- 2025-03-10 常见的加密算法,以及各自的优缺点
- 2025-03-10 京东大佬问我,常用的信息加密算法有哪些?举例说明其用法与流程
- 2025-03-10 python散装笔记——123: 客户端与服务器之间套接字和消息加解密
- 2025-03-10 电子文档加密系统
- 2025-03-10 加解密的艺术
- 最近发表
-
- 绝区零:公测必看!300菲林兑换码、萌新补给一览!切勿踩坑!
- 事半功倍 轻松制作可交互移动原型
- LOL英雄联盟美服注册教材 教你玩转美服
- 「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)
- 如何轻松薅Cursor羊毛:用免手机号邮箱快速注册
- C/C++基础语法复习(一):C++与C语言的区别,主要有这些
- 永久免费的高配容器Clawcloud,超爽体验!
- Spaceship低价注册域名 | 每年5元不到 | XYZ域名 | 托管cloudflare
- 云杉网络DeepFlow基于Free5GC的方案示例
- alma8飞速搭建zabbix6、微信报警、windows、linux、交换机监控
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)