比特币钱包地址

比特币钱包地址

钱包的地址是根据钱包公钥匙计算出出来的,但是不同链上的计算方式不一样,编码方式也不一样,以太坊使用的是十六进制编码,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

你可能感兴趣的:(比特币区块链地址)