Realtime Price(实时价格):

比特币地址的字符数

作者:walker

发布时间:2014年2月24日

网络来源:彩云比特

        记得就在今年1月3日那天,也就是比特币的生日,有三位博友为比特币庆生给大家发比特币,我记得有@虫虫爱阳光 @MyXCoin,还有一位不记得了。正是这位我记不得他ID的网友提醒说我的比特币地址只有33个字符,估计是这个原因,他没有发给我庆生红包。当然,我不是小肚鸡肠想讨论没发的红包,而是以此为引子,开始讨论为什么会出现这种只有33个字符的比特币地址。
        说实话,我以前没有注意过比特币地址的位数,因为以前看过一篇帖子说比特币地址是以1打头,再跟33个字符,我也一直以为是比特币地址都是34个字符的。今天我忽然想起了那个微博发币的往事,抽了点时间分析了产生33字符比特币地址的原因,留个帖子同大家分享。
        好,先公布一下我的比特币地址:1WALKERswgz1wKDvoxiWEnKpEJGwYVrZK,千真万确,是33个字符。
        比特币地址是公钥经过SHA256得到32字节的哈希结果,再经过RIPEMED得到20字节的摘要,加一字节的版本号,再接上这20字节数据经过SHA256取4字节作为校验码,为了防止把大数当成负数,在其头上再加了一字节0x00,一共26字节。比特币地址就是这26字节的数据经过base58编码形成的。
        说base58编码前不得不说一下base64编码,base64编码方式是一种标准的把二进制数据转换成可见字符的方法,它转换出来的编码包含0-9,a-z,A-Z,还要加上两个符号,标准的是+和/,也有一种变种是用的_和-。2的6次方是64,也就是说6bits的数据可以转换出一个base64编码字符,这样一来就挺精确的,一段固定长度的不同内容数据通过base64总是转出相同长度的编码,比如24字节的数据,转出的base64编码就是32个字符(24*8/6=32)。
        再来说base58,base58是比特币源码里最早使用的一种变种编码方式,这种编码方式去掉了base64里的6种字符,首先是两个符号(+/),然后是去掉了0OlI。为什么要去掉这6个符号呢?原因如下:
        1.0和O,I和l太容易混淆,要是人用手抄比特币地址,再由其他人看时是很容易搞错的;
        2.一般的账号都是不接受符号的,比特币地址就是比特币账号,所以也不打算例外;
        3.发送邮件时一行过长时换行会因为符号把编码分断,作者不希望比特币地址被分断;
        4.鼠标准备双击选中一串字符时,如果有+/或者-,选中字串不是编码全部,而是会被符号分断,作者希望比特币地址双击就选中,方便。
        base58也就是只有58个索引值,对就58个字符,那对输入的源数据进行切分时,就是尽量获取一段尽量大但又不超过58的数,所以切取到的bits可能是6位,也可能是5位。
        再回过来说比特币地址的进行base58编码前的源数据是26字节,但由于附加那字节是0,目前拼上去的版本号也是0,所以真正参加base58编码的数据只有24字节。这24字节的数据如果运气够好,每次都是分得6bits作为base58的索引,而且索引值还都不超过58,那这样的地址就只有33个字符了。这33个字符里包含一个固定的1,其他32个字符是按24*8/6算出来的。
        好,再讨论一个生成33字符地址的机率。每次取6bits,可能得到的索引值是64个,但要想得到33字符地址,那索引值不能大于58,那第一个6bits得到58以下数值索引的机率是58/64,依次类推,共有32个6bits,那计算出的机率是(58/64)^32=4.28%。我今天也写了个程序去测试,发现得到33字节比特币地址的实测机率也差不多就在4%。
        好了,说结论吧,以后见到33字节的比特币地址不用觉得奇怪,是4.28%的比特币地址只有33个字节。另外,比特币地址是有4字节的检验码的,如果不小心输错一位地址字符,发送是不会成功的,请放心使用。

  • imcoddy
  • 2014-2-24 22:34:32

    沙发

其实在 Bitcoin Wiki 里面开头就说了,比特币的地址是 27 至 34 位。不过 34 位之外的似乎的确比较少见

A Bitcoin address, or simply address, is an identifier of 27-34 alphanumeric characters, beginning with the number 1 or 3, that represents a possible destination for a Bitcoin payment.

en.bitcoin.it/wiki/Address

相关文章:

比特币布道者

比特币的坚定信仰者!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注