PoC技术分析系列(四):谈谈BHD中的Base58编码

PoC技术分析系列(四):谈谈BHD中的Base58编码_第1张图片

AIKing(微信号:aiking2018)

2019.7.16

      最近忙于写区块浏览器代码,文章没有心情写,BHD目前没有开源,所以需要我们多费一些精力去分析其数据格式,不过也正是一个深入学习的好机会,通过分析对Bitcoin又理解深刻了不少,例如BHD基于的Bitcoin版本激活了隔离验证,通过数据分析,对于Bitcoin交易生成过程,隔离验证,脚本等都有了一个更准确的理解。想要对Bitcoin理解的更深入,必备的基础知识是绕不过去的,只停留在科普水平是无法真正领会Bitcoin精髓的,今天这篇文章就分享一下一个应用很广的基础知识:Base58编码。

    Base58是什么鬼?看到名词不要怕,其实没那么复杂,如果我告诉你我们从小学习数学使用的是Base10,我们记录时间用的是Base60,你是不是马上就清楚了,所谓Base58,就是58进制。那么好好的10进制不用,或者计算机不是用二进制吗?为什么要又搞出来一个58进制。58进制的用处是可以使用更简短的方式表达一个非常大的数字。其实58进制早以在每一个玩BHD的朋友身边了,只不过你不知道而已,BHD钱包地址就是采用base58编码的,例如我的BHD地址:32esGUrk1S3BZeux7vLkBriY4r5BCvbbZt。后面我会写一篇文章详细讲解BHD地址中隐藏的秘密,因此本篇文章就算给后续文章打个基础。

PoC技术分析系列(四):谈谈BHD中的Base58编码_第2张图片

    既然提到进制,大家想一下我们最熟悉的10进制就可以知道,每种进制都有一个使用的字符表,例如二进制是0,1,10进制是0-9。base58也不例外,上图中列出了常用的几种进制使用的字符表。大家仔细观察一下,会发现base58字符表中去掉了一些字符和数字,例如0和o,i,为什么这样?这就是base58的另一个特点,便于阅读,没有歧义,把容易混淆的字符和数字去掉了。从上图可以看到,在base58中,1是第一个字符,那么表示0,A表示9,以此类推。

    既然base58和我们平时使用的10进制类似,那就也能表达同样的数字,下图就是用不同进制表达的同一个数字,至于进制换算方法用小学数学知识就可以搞定,就是不断除58,然后把得到的结果用base58相应的符号表示。例如我们把10进制的123456789转化成base58,只需要五个字符即可。

PoC技术分析系列(四):谈谈BHD中的Base58编码_第3张图片

下图是用不同进制来表示10进制的9999,大家可以看到使用base58来表达会更简短更易读。

PoC技术分析系列(四):谈谈BHD中的Base58编码_第4张图片

    通过上面我们可以看到base58编码和解码还是挺麻烦的,其实这些功能已经都有现成的工具可以直接使用,上面的讲解是让大家懂得原理,达到知其然知i其所以然。使用python语言,我们可以引入base58模块,很方便的进行base58的编码和解码。python语言非常简单易学,即使是非专业人员也可以很快掌握,有空玩玩还是挺有趣的。

    上面我们提到BHD钱包地址就是使用base58编码,那么我们就可以对它进行base58的解码操作,看看里面到底隐藏着什么?BHD的钱包地址和我们平时使用的银行帐号是完全不同的,两者代表了去中心化和中心化完全不同的模式。BHD钱包地址可不简简单单是一串字符。我们先用Base58解码来看一下,我的BHD钱包地址是:32esGUrk1S3BZeux7vLkBriY4r5BCvbbZt。

PoC技术分析系列(四):谈谈BHD中的Base58编码_第5张图片

    大家可以看到,我的钱包地址解开后是一串字符:050a90116771806b7027bc5c5fb0ddb62d5a4bcccb62725d3b,其中最后8个数字是校验位:62725d3b,这8个字符对前面的字符起到确认作用,也就是当你不小心写错了地址,程序是可以检查出来的,能够在一定程度上避免错误的出现,这也是使用base58编码比直接发送数字的好处之一。在我们验证正确之后,这8位字符就可以丢掉不管了。

    我们之前也提过,BHD钱包地址格式为Bitcoin最新标准地址格式:P2SH,即Pay-to-Script-Hash,除此之外Bitcoin还有其他地址格式,那么怎么进行区分呢,就通过地址中的第一个字符,凡是开头为3的地址就是P2SH地址,这种地址进行Base58解码之后,前两个字符一定是05,因此这是地址类型的标志位,那么其余的这串字符0a90116771806b7027bc5c5fb0ddb62d5a4bcccb,才是真正的关键。而且这串字符的长度一定是40个,否则就是错误的,不信你可以数一数。

    在其他人给你转账时,对方的钱包就是进行上面的解码操作提取出这个40个字符长度的内容,然后填写到交易里,而不是直接把你的地址填进去。同样,我进行反向操作,就是在前面补上05,在后面补上8位校验位,再用base58进行编码,我就可以得到一笔转账的地址了。大家从BHD官网的区块浏览器可以直接看到交易地址,背后就是要经过这样的操作才可以。

    好了,base58并不复杂,但是应用非常广,大家了解了这些基础知识才能逐步了解更深入的概念,例如隔离验证,闪电网络等,虽然炒币不需要技术,但是建议大家有空可以学习一点,这样可以建立自己的判断力,而不是人云亦云,只能根据网站是否漂亮,项目团队成员是否有外国人等这些信息来进行判断。

    我们解码后得到的40位字符串:0a90116771806b7027bc5c5fb0ddb62d5a4bcccb,有什么秘密,就是一串无意义的字符吗?欲知后事如何,且听下文分解!

    如果您觉得文章不错,请给作者打赏0.1BHD:32esGUrk1S3BZeux7vLkBriY4r5BCvbbZt

    欢迎加入”BHD技术派“微信群(5BHD),群内分享原创技术文章,讲解技术知识,定期发布BHD数据统计报告

    道德三皇五帝,

    功名夏后商周,

    五霸七雄闹春秋,

    顷刻兴亡过手。

    青史几行名姓,

    北邙无数荒丘,

    前人播种后人收,

    说甚龙争虎斗。

你可能感兴趣的:(PoC技术分析系列(四):谈谈BHD中的Base58编码)