比特币钱包地址

钱包的地址是依据钱包公钥匙计算出进去的,然而不同链上的计算形式不一样,编码方式也不一样,以太坊应用的是十六进制编码,EIP-55利用了其大小写对地址进行校验。
比特币的地址是应用的base58Check进行编码,将版本号和校验和退出了地址中,这样能够无效避免因认为输错而产生谬误转账,上面介绍一下比特币的钱包地址:

一、base58编码

base58编码和base64编码不一样,不仅仅是应用的字符集不一样,而且应用的编码方式也不一样。base64是将3字节数据用4个字节来示意,这样能够无效防止二进制中的控制字符,达到很好的传输目标。
而base58呢?它更像是2进制、8进制、16进制的进制。他的目标有一下几个:
相比Base64,Base58不应用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。

  • (1) 防止混同,在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会十分类似。
  • (2) Base64编码中蕴含"+"和"/",非字母或数字的字符串作为帐号较难被承受。
  • (3) 在邮件系统中,应用字符和数字的组合,不容易换行。
  • (4) 双击能够选中整个字符串。

因为base58理论就是58进制,因为它不是2的整数倍,所以会有大量的除2运算,因而其效率比base64慢很多。
二进制用到的字符集="01"
八进制用到的字符集="01234567"
十进制用到的字符集="0123456789"
十六进制用到的字符集="0123456789ABCDEF"
58进制用到的字符集="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

二、Base58Check编码

在钱包的应用过程中,如果间接应用base58编码会呈现一个问题,只有你输出的字符是非法的,那么就是一个钱包地址,即使是输错了也会是一个非法的钱包地址。
只是这个钱包地址对应的私钥就是其余私钥了,你永远也推算不进去。因而有了base58Check的钱包地址,这个地址如果输错了就不再是非法的钱包地址。
先看看base58Check怎么对数据进行编码,咱们把须要编码的数据成为payload(装载),而后对这个payload进行编码,其格局为:

version + payload + checksum```从这个格局中能够看出,咱们在编码的时候封装了冗余数据,因而在校验的时候,输错了就可能检测进去* version:版本号,上面会列出常见的版本号和它编码过后可能呈现的前缀* payload:装载的数据,比特币的钱包地址是钱包公钥通过两次哈希(hash256和ripemd160)失去的* checksum:这个是两次哈希去后面四字节,(sha256(sha256(version+payload))).sub(0,4);最初对拼接起来的数据进行base58编码,这样就失去了base58check编码的数据常见的钱包地址应用的版本号:|  type                         | version   |Base58 result prefix   ||  Bitcoin Address              |  0X00     |  1                    ||  Pay to Script Hash Address   |  0X05     |  3                    ||  Bitcoin Testnet Address      |  0X6F     |  m, n                 ||  Private Key WIF              |  0X80     |  5, K, L              ||  BIP-38 Encrypted Private Key |  0X0142   |  6P                   ||  BIP-32 Extend Public Key     |  0488B21E |  xpub                 |