首页 > 加密广场 > 比特骑士的观点

杭州加密行业风波下:从二进制前缀到比特币私钥编码技术解析

比特骑士
@0x_Bitcoin_Knight
2025-06-10
现在网传杭州派出所传唤加密行业从业者,我想问,这吊事与你有关系吗?你又没赚钱,还亏完了,正想问问他们能不能把钱追回来,不玩了。
所以我们还是继续学习吧,哈哈。
1. “前缀”的功能
十进制是大家最熟悉的,因此作为例子会更容易理解。
第一步:假设一个3开头的十进制的四位数,那么最小就是3000,最大就是3999。换句话说,只要这个数n满足 3000 \u003c= n \u003c= 3999,那么这个数的第一个数字就一定是3。
第二步:OK,那现在我们只要知道3000和3999对应的二进制是多少就行了。
3000 -\u003e 101110111000(最小值,12位)
3999 -\u003e 111110011111(最大值,12位)
第三步:现在遇到一个8位的二进制数xxxxxxxx(每一位x都可能是0或1),现在要在前面加上几位,然后转化为十进制,并且要让十进制的第一个数字始终是3,该怎么做。
第四步:很简单,就在这个8位二进制数前面加上一个四位数yyyy“前缀”即可,并且能够保证yyyyxxxxxxxx构成的12位二进制数的大小处在上述范围内就行了。这个四位数可以是1110(1110xxxxxxxx),也就是说不管处在“低位”的x是1还是0,这个数字的大小都是由“高位”来决定的。
家庭作业:1,你觉得这个四位数还可能是什么?
2,加上其它位数的前缀行不行,比如8位?
如果上述二进制和十进制的转化弄清楚了,那么二进制与58进制的转化也是一个道理。
Base58的编码本质上就是一个58进制数,因此我们在二进制数前加上一个合适的“前缀”就可以使得对应的58进制数开头是固定字符。
2. 私钥的前缀
看了前面文章的小盆友知道了私钥就是一个256位的二进制数,为了让“钱包”知道这个二进制数是一个比特币私钥,就在私钥上加了标签:0x80(十六进制,对应的二进制就是10000000),然后再把这个264位二进制用Base58Check进行编码成字符串。这样钱包在导入这个编码后的字符串时就知道,这是个比特币私钥,因此编码后的比特币私钥格式也叫“钱包导入格式|Wallet Import Format|WIF。
由于0x80处于高位,所以导致编码后的字符串以“5”开头。
关于编码后的“压缩式钱包导入格式|WIF-compressed”为什么都是以K或者L开头的,也是一个道理。Base58Check的编码规则是什么,我们下一篇再讲。
相关资讯
您可能喜欢的标签
随便看看

2JMTT.com Copyright ©加密头条 All Rights Reserved

加密头条,探索加密世界无限可能