区块链-Base58Check编码

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html 算法

A=RIPEMD160(SHA256(K)),其中K是公钥,A是地址。编码

平时所见的比特币地址就是A通过Base58Check编码事后得来的。.net

Base编码blog

是一种二进制转可视的字符串的算法,主要是用来把大的整数转换成字符串的形式,计算机系统中传输的数据是二进制的,这样是很是不方便的,因此一般为了更简洁的表示,咱们会使用一些更大进制的表达方法,好比十进制(0-9),十六进制(0-9和A-F),十六进制比十进制更短更简洁。字符串

Base64get

而Base64采用了26大小写字母,十个数字以及"+"和"/"六十四个字符。说白了简单理解就是将二进制数转化为六十四进制的数。这个就是Base64编码。(具体:http://www.javashuo.com/article/p-fyngkjzy-ms.html)。class

将Base64中的六十四字符去掉几个就成了Base58编码。具体地,Base58不含Base64中的0(数字 0)、O(大写字母 )、l(L的小写字母 )、I(i的大写字母 ),以及“+” 和“/”两个字符。简而言之,Base58 就是由不包括(0,O,l,I)的大小写字母和数字组成。去掉这六个恰好是58个,因此就称为Base58.比特币

什么是Base58Check?二进制

比特币中使用的是Base58Chec而不是Base58,他们之间的区别就是Base58Chec有验证机制。再传播过程当中,若是漏写几个字符,Base58检测不出来,因此没有使用Base58。方法

Base58Check编码过程?

首先咱们要对数据添加一个称做“版本字节”的前缀,这个前缀用来识别编码的数据的类型。例如,比特币地址的前缀是 0(十六进制是 0x00),而对私钥编码时前缀是128(十六进制是 0x80)。 

而后咱们计算“双哈希”校验和,意味着要对以前的结果(前缀和数据)运行两次 SHA256哈希算法:

                               checksum=SHA256(SHA256(prefix+data))

在产生的长 32 个字节的哈希值(两次哈希运算)中,咱们只取前4个字节。这4个字节就做为检验错误的代码或者校验和。校验码会添加到数据以后。结果由三部分组成:前缀、数据和校验和。这个结果采用以前描述的Base58字母表编码。

              

使用 Base58Check编码,能够实现数据压缩,易读并且有错误检验。