区块链系统:什么是私钥?

这篇具有很好参考价值的文章主要介绍了区块链系统:什么是私钥?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在比特币中,私钥本质上就是一个256位的随机整数。我们以JavaScript为例,演示如何创建比特币私钥。

在JavaScript中,内置的Number类型使用56位表示整数和浮点数,最大可表示的整数最大只有9007199254740991。其他语言如Java一般也仅提供64位的整数类型。要表示一个256位的整数,只能使用数组来模拟。bitcoinjs使用bigi这个库来表示任意大小的整数。

下面的代码演示了通过ECPair创建一个新的私钥后,表示私钥的整数就是字段d我们把它打印出来:

区块链私钥,区块链技术与应用,区块链,javascript,开发语言

注意:每次运行上述程序,都会生成一个随机的ECPair,即每次生成的私钥都是不同的。

256位的整数通常以十六进制表示,使用toHex(32)我们可以获得一个固定64字符的十六进制字符串。注意每两个十六进制字符表示一个字节,因此,64字符的十六进制字符串表示的是32字节=256位整数。

想要记住一个256位的整数是非常困难的,并且,如果记错了其中某些位,这个记错的整数仍然是一个有效的私钥,因此,比特币有一种对私钥进行编码的方式,这种编码方式就是带校验的Base58编码。

对私钥进行Base58编码有两种方式,一种是非压缩的私钥格式,一种是压缩的私钥格式,它们分别对应非压缩的公钥格式和压缩的公钥格式。

具体地来说,非压缩的私钥格式是指在32字节的私钥前添加一个0x80字节前缀,得到33字节的数据,对其计算4字节的校验码,附加到最后,一共得到37字节的数据:

0x80           256bit             check
┌─┬──────────────────────────────┬─────┐
│1│              32              │  4  │
└─┴──────────────────────────────┴─────┘

计算校验码非常简单,对其进行两次SHA256,取开头4字节作为校验码。

对这37字节的数据进行Base58编码,得到总是以5开头的字符串编码这个字符串就是我们需要非常小心地保存的私钥地址,又称为钱包导入格式:WIF(Wallet Import Format),整个过程如下图所示:

区块链私钥,区块链技术与应用,区块链,javascript,开发语言

可以使用wif这个库实现WIF编码:

const wif = require('wif');
// 十六进制表示的私钥:
let privateKey = '0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d';
// 对私钥编码:
let encoded = wif.encode(
0x80, // 0x80前缀
Buffer.from(privateKey, 'hex'), // 转换为字节
false // 非压缩格式
);
console.log(encoded);

另一种压缩格式的私钥编码方式,与非压缩格式不同的是,压缩的私钥格式会在32字节的私钥前后各添加一个0x80字节前缀和0x01字节后缀,共34字节的数据,对其计算4字节的校验码,附加到最后,一共得到38字节的数据:

0x80           256bit           0x01 check
┌─┬──────────────────────────────┬─┬─────┐
│1│              32              │1│  4  │
└─┴──────────────────────────────┴─┴─────┘

对这38字节的数据进行Base58编码,得到总是以KL开头的字符串编码,整个过程如下图所示:

区块链私钥,区块链技术与应用,区块链,javascript,开发语言

通过代码实现压缩格式的WIF编码如下:

const wif = require('wif');
// 十六进制表示的私钥:
let privateKey = '0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d';
// 对私钥编码:
let encoded = wif.encode(
0x80, // 0x80前缀
Buffer.from(privateKey, 'hex'), // 转换为字节
true // 压缩格式
);
console.log(encoded);

目前,非压缩的格式几乎已经不使用了。bitcoinjs提供的ECPair总是使用压缩格式的私钥表示:文章来源地址https://www.toymoban.com/news/detail-647964.html

const
bitcoin = require('bitcoinjs-lib'),
BigInteger = require('bigi');

let
priv = '0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d',
d = BigInteger.fromBuffer(Buffer.from(priv, 'hex')),
keyPair = new bitcoin.ECPair(d);
// 打印WIF格式的私钥:
console.log(keyPair.toWIF());

小结

  1. 比特币的私钥本质上就是一个256位整数,对私钥进行WIF格式编码可以得到一个带校验的字符串。
  2. 使用非压缩格式的WIF是5开头的字符串。
  3. 使用压缩格式的WIF是KL开头的字符串。

到了这里,关于区块链系统:什么是私钥?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第六套区块链系统部署与运维

    第六套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 题意: P2P起始端口 30500 channel起始端口 20500 JSONRPC 8945 使用Docker配置 使用 build_chain.sh 文件 进行生成节点文件

    2024年02月05日
    浏览(45)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第三套区块链系统部署与运维

    第三套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 根据题意: 3个独立组织以及6个节点,网络拓扑为星型网络,并且在联盟链中需实现2个数据隔离场景(group1、group2) 所以需要agencyA[两个节点,1,2群组],agencyB[两个节点,1群组],agencyC[两个节点,2群组] 1.使用给定工

    2024年02月05日
    浏览(69)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第二套区块链系统部署与运维

    第二套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 docker: 20.10.21 webase-deploy : 1.5.5 mysql: 8.0.34 使用 build_chain.sh 脚本文件进行搭建区块链 ,要求: 四节点,默认配置,单机,docker

    2024年02月08日
    浏览(111)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第一套区块链系统部署与运维

    第一套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 题意: 要求搭建一条四节点的区块链系统,我们选择使用fisco作为此次测试的链子 我们使用build_chain.sh进行构建单机四节点,并且使用官方的默认端口【正式比赛大概率不会用默认端口,会有详细的说明使用什么端

    2024年02月08日
    浏览(66)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第五套区块链系统部署与运维

    第五套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 此题在官网有例子如图: 每个机构拥有两个节点,机构A属于中心,属于群组1,2,3, 机构B只属于群组1, 机构C 只属于群组3,机构D只属于群组2。 然后根据此图编写ipconf文件,使用文件形式搭建节点【题目没有指定

    2024年02月04日
    浏览(52)
  • 区块链技术简介 区块链具体是什么

    前言 本文是对区块链技术的简介总结,如果需要区块链技术支持可以百度搜索 风火源码网或者私信博主 定义:区块链(Blockchain)是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术(

    2024年02月22日
    浏览(44)
  • 【区块链】区块链技术:应用、代码

    区块链是一种去中心化的分布式账本技术,它可以记录交易信息、数字资产等数据,并且保证数据的安全性和不可篡改性。区块链技术的核心是由多个区块组成的链式结构,每个区块包含了一定数量的交易信息和一些元数据,同时还包含了前一个区块的哈希值,这样就形成了

    2024年02月08日
    浏览(39)
  • 5.区块链系列之私钥管理

    本文讲解如何对私钥加密处理以及部署后需注意的事项 1.新建encryptKey.js 目前我们的.env文件配置为 控制台执行生成.encryptedKey.json文件 现在我们删除.env中的PRIVATE_KEY=36b785b98b0567f1e6cdfe4f67e884d8d3fb24ba0dbac0776f935d558f39e165 2. 修改deploy.js私钥部分 现在我们将上节介绍的deploy.js文件中注

    2024年02月12日
    浏览(38)
  • 什么是区块链?区块链的核心技术包括哪些?

    简介:区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer,P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节点,因此避免

    2023年04月09日
    浏览(48)
  • 区块链技术与应用-----区块链概念

    一,智能社会与区块链技术 当前我们进入智能化社会发展时期,新兴的5G,量子计算,云计算,物联网,人工智能,区块链等新兴IT技术,将支撑人类迈入智能化社会。区块链作为智能化社会的关键技术之一,其核心价值是实现社会关系运行的智能化。 二,区块链的概念与体

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包