区块链系统探索之路:私钥的压缩和WIF格式详解

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

在前面章节中,我们详细介绍了公钥的压缩,在比特币网络中,一个私钥可以对应两个地址,一个地址是由未压缩公钥所生成的地址,另一个就是由压缩公钥所创建的地址,从公钥到区块链地址的转换算法,我们在这里给出详细描述和代码实现,本节我们看看私钥的压缩以及相关的WIF数据格式。

搞笑的是私钥”压缩“后,其长度反而比压缩前增加了一个字节。而“压缩”方法也相当简单,就是在私钥末尾增加一个字节01,例如如果私钥的数据为:1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD,
那么对应的“压缩”格式就是:
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD01
我们比较一下就可以看出,“压缩”后的私钥就是在末尾增加了字节01。为什么“压缩”私钥呢。前面我们提到过公钥有两种存储方法,压缩格式和非压缩格式,私钥是否“压缩”就对应创建哪种公钥存储模式,如果私钥”压缩“过,那就意味着使用它来创建压缩格式的公钥,如果没有“压缩”,那就使用它创建非压缩格式的公钥。

公钥的压缩是为了能在网络进行传输,通常情况下私钥不需要经常进行网络传输,因为过多的把私钥暴露在网络会增加泄露的几率,一旦私钥泄露,你所有的资产或私有信息将会丢失。然而在某些情况下,私钥也有传输的需要,例如将私钥从一个区块链客户端发送到另一个客户端进行导入时,私钥就需要进行网络传输了,于是我们也就有了对其进行编码的需要,由此私钥对应的编码简称为WIF。

我们看看WIF编码格式的基本步骤:
1,如果私钥对应的是比特币主网络,那么在私钥的开头增加一个字节0x80,如果对应测试网络增增加字节0xef.
2,将其进行大端格式存储
3,如果该私钥要用来创建压缩格式的公钥,那么在步骤2的末尾增加1个字节0x01
4,对步骤3做sha256哈希,然后去结果的前4个字节
5.把步骤3和4的结果首尾相连,然后再做base58编码
我们使用代码实现看看:

privKey = 0x038109007313a5807b2eccc082c8c3fbb988a973cacf1a7df9ce725c31b14776
pubKey = privKey * G

class PrivateKey:
    def __init__(self, secret):
        self.secret = secret

    def wif(self, compressed=True, testnet=False):
        #先将私钥进行大端转换
        secret_bytes = self.secret.to_bytes(32, 'big')
        if testnet:
            #如果是测试网络的私钥则在开头增加字节0xef
            prefix = b'\xef'
        else:
            #如果是主网络则在开头增加字节0x80
            prefix = b'\0x80'
        if compressed:
            #如果要创建压缩格式的公钥,在末尾增加自己0x1
            suffix = b'\0x01'
        else:
            suffix = ''

        return encode_base58_checksum(prefix + secret_bytes + suffix)

private_key = PrivateKey(privKey)
wif_private_key = private_key.wif()
print(f"the wif for give private key is: {wif_private_key}")

上面代码运行后结果为:

the wif for give private key is: 19re3h9z4eEC6WYaziGHvAY8nS8hNddiPcxe4B9a6vA2SbEaSjtqDLYC3SYk

更多内容请在 b 站搜索 coding 迪斯尼文章来源地址https://www.toymoban.com/news/detail-646638.html

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

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

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

相关文章

  • RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8

    RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8

    非对称加密算法,两个且不同的Key,一个公开,一个私密,公开加密,私密解密。 特点: 原文短,加密后密文长 生成相对较慢 安全性超强 我们使用.net进行生成公钥、私钥。 使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥,方法中接收一个参数, true  表示同时包含 RSA 公钥

    2024年01月21日
    浏览(49)
  • 探索区块链技术的未来之路 - 《区块链指南》

    项目地址:https://gitcode.com/yeasy/blockchain_guide 在数字化的世界里,区块链技术以其去中心化、安全性高和透明度强的特点逐渐崭露头角。如果你对区块链领域充满好奇,或者正在寻找一个全面了解这一技术的资源,《区块链指南》是一个绝佳的学习平台。 《区块链指南》是由知

    2024年04月11日
    浏览(11)
  • 区块链系统:什么是私钥?

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

    在比特币中,私钥本质上就是一个256位的随机整数。我们以JavaScript为例,演示如何创建比特币私钥。 在JavaScript中,内置的Number类型使用56位表示整数和浮点数,最大可表示的整数最大只有 9007199254740991 。其他语言如Java一般也仅提供64位的整数类型。要表示一个256位的整数,

    2024年02月13日
    浏览(7)
  • 【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

    【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

    序列化和反序列化 序列化就是指把对象转换为字节码; 对象传递和保存时,保证对象的完整性和可传递性。把对象转换为有字节码,以便在网络上传输或保存在本地文件中; 反序列化就是指把字节码恢复为对象; 根据字节流中保存的对象状态及描述信息,通过反序列化重建

    2024年01月22日
    浏览(16)
  • 区块链与社交媒体革命:剖析Facebook的探索之路

    区块链与社交媒体革命:剖析Facebook的探索之路

    在当今数字化时代,社交媒体不仅是人们日常生活的一部分,更是连接世界的桥梁。然而,随着信息时代的发展,隐私泄露、数据滥用等问题愈发凸显,引发了对社交媒体平台的担忧和质疑。正是在这样的背景下,区块链技术作为一种去中心化、不可篡改的技术手段,逐渐被

    2024年04月09日
    浏览(13)
  • 猫头虎分享: 探索软件系统架构的革新之路

    猫头虎分享: 探索软件系统架构的革新之路

    博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接 : 🔗 精选专栏 : 《面试题大全》 — 面试准备的宝典! 《IDEA开发秘籍》 — 提升你的IDEA技能! 《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师! 《100天精通Golang(基础入门篇)》 — 踏入

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

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

    2024年02月12日
    浏览(8)
  • 区块链知识习题测试:公钥和私钥、公有链、元宇宙

    1、比特币水龙头是什么? • A、是一个水龙头的品牌名称 • B、是一个民间组织 • C、是一个网站 • D、是一个黑客的代号 正确答案:C 答案解析:在刚诞生那几年,比特币很2113便宜,并5261且非常容易获得。2010年年底,为了让更4102多人知道并尝试使用比特1653币,程序员加

    2024年02月05日
    浏览(53)
  • 使用OpenSSL生成PKCS#12格式的证书和私钥

    要使用OpenSSL生成PKCS12格式的证书和私钥,可以按照以下步骤进行操作: 首先,确保已在计算机上安装了OpenSSL。可以从OpenSSL官方网站(https://www.openssl.org/)下载并安装适用于您的操作系统的版本。 这里简单总结下在 Windows 上安装 OpenSSL 步骤。 从 OpenSSL 官方网站(https://www.

    2024年01月16日
    浏览(12)
  • GO语言-区块链离线钱包开发之如何存储私钥

    # 如何存储私钥 在确保私钥安全的情况下,为了更好的体验,我们需要让钱包把私钥存储起来。给用户更好的体验感。Geth是将私钥通过加密技术转换为json格式的文件,这个文件虽然是明文的,但是解析它的时候需要密码,否则将无法解密。 在Geth中,使用`personal.newAccount(\\\"p

    2024年02月16日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包