乐趣区

关于比特币:比特币钱包地址

比特币钱包地址

钱包的地址是依据钱包公钥匙计算出进去的,然而不同链上的计算形式不一样,编码方式也不一样,以太坊应用的是十六进制编码,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                 |
退出移动版