ripemd160比特币 2016年比特币最低价格
一、【2019-07-12】比特币的钱包地址验证
第一步,随机选取一个32字节的数,大小介于1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
第二步,使用椭圆曲线加密算法(ECDSA-SECP256k1)计算私钥所对应的非压缩公钥(共65字节,1字节0x04,32字节为x坐标,32字节为y坐标)。
0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
第三步,计算公钥的SHA-256哈希值
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
第四步,计算上一步哈希值的RIPEMD-160哈希值
010966776006953D5567439E5E39F86A0D273BEE
第五步,在上一步结果之间加入地址版本号(如比特币主网版本号"0x00")
00010966776006953D5567439E5E39F86A0D273BEE
第六步,计算上一步结果的SHA-256哈希值
445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094
第七步,再次计算上一步结果的SHA-256哈希值
D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30
第八步,取上一步结果的前4个字节(8位十六进制数)D61967F6,把这4个字节加在第五步结果的后面,作为校验(这就是比特币地址的16进制形态)
00010966776006953D5567439E5E39F86A0D273BEED61967F6
第九步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
如果给你个地址你只要:
base58->二进制->这时是第8步,
如果我们把后面4个字节拿掉,
就是第5步的结果,你只要重复以上步骤到第8步
取前4个和地址后4位比较就可以得到答案了
二、比特币地址
比特币地址
比特币地址是用于在比特币网络中接收比特币的唯一标识符。它由公钥经过一系列复杂的运算和编码过程生成,确保了地址的唯一性和安全性。以下是比特币地址生成的详细过程:
一、公钥生成地址的必要性
在比特币系统中,虽然公钥本身是公开的,但直接使用公钥作为地址存在多个问题。首先,公钥有未压缩和压缩两种形式,长度不同,这会导致用户混淆。其次,公钥的长度较长,会增加链上存储和搜索的压力。再者,虽然从公钥推算出私钥几乎不可能,但增加一层地址可以进一步提高比特币系统的防护性。最后,通过对地址进行设计,可以支持更加复杂的脚本锁定,增加系统的拓展性。
二、压缩公钥生成地址的流程
对公钥进行双哈希(HASH160)运算
首先,选择压缩公钥作为起点。然后,使用SHA-256算法对公钥进行哈希运算,得到的结果再经过RIPEMD-160算法进行第二次哈希运算,最终得到公钥哈希值。这个哈希值为二进制160位,十六进制40个字符,大小为20字节。
对“公钥哈希值”加上版本前缀
为了区分比特币主网和测试网的地址,需要在公钥哈希值前加上版本前缀。比特币主网的版本前缀为“0x00”,而测试网的版本前缀为“0x6F”。添加版本前缀后,得到的结果为21字节。
计算校验码(即两次SHA-256)
对加上版本前缀后的结果进行两次SHA-256哈希运算,取前4个字节作为校验码。校验码的作用是确保地址在传输过程中没有被篡改。
进行Base58Check编码
将版本前缀、公钥哈希值和校验码连接起来,得到的结果为25字节。然后,使用Base58Check编码对这个结果进行编码,得到最终的比特币地址。Base58Check编码是一种基于Base58的编码方式,它去除了容易混淆的字符(如0、O、I、l等),并增加了校验功能,提高了地址的可读性和安全性。
三、比特币地址的特点
唯一性:每个比特币地址都是唯一的,由公钥经过一系列复杂的运算和编码过程生成。安全性:比特币地址的设计考虑了多种安全措施,如哈希运算、版本前缀和校验码等,确保了地址的不可篡改性和抗攻击性。可读性:比特币地址使用Base58Check编码,去除了容易混淆的字符,提高了地址的可读性。匿名性:比特币地址与用户的真实身份没有直接关联,保护了用户的隐私。综上所述,比特币地址是比特币网络中用于接收比特币的唯一标识符,它由公钥经过一系列复杂的运算和编码过程生成,具有唯一性、安全性、可读性和匿名性等特点。
三、【区块链】什么是比特币地址
比特币地址是一串由字母和数字组成的26位到34位字符串,看起来有些像乱码。但它就是你个人的比特币账户,相当于你的银行卡卡号,任何人都可以通过你的比特币地址给你转账比特币。
它与比特币私钥不同,不会因为信息泄露而造成比特币丢失,因此你可以将比特币地址放心的告诉任何人。
通过区块链浏览器可以查看每个比特币地址所有的转账交易记录。
常用的比特币区块链浏览器有:
我们常用的比特币地址格式一般有如下四种。
1、BASE58格式
BASE58格式是人们常见的比特币地址格式,一般由1开头的。
例如:1M8DPUBQXsVUNnNiXw5oFdRciguXctWpUD
2、HASH160格式
HASH160格式为RIPEMD160算法对130位公钥的SHA256签名进行计算得出的结果。
例如:fbfb58defc272942fc31d00c007b59aa4cb5087a
3、WIF压缩格式
WIF压缩格式即钱包输入格式,是将BASE58格式进行压缩后的结果130位公钥格式这是最原始的由ECDSA算法计算出来的比特币公钥。
例如:
0469B0E479C9A358908DB9CF4628BDD643C3F81C4F0096AAD442DA6CA8BCC4FD86A8D47D7A865E178B6D062CC9B702908973952062A1D767DA9B2BD2095D5CCF6E
4、60位公钥格式
60位公钥格式即130位公钥进行压缩后得出的结果。
例如:
0269B0E479C9A358908DB9CF4628BDD643C3F81C4F0096AAD442DA6CA8BCC4FD86
比特币是建立在数学加密学基础上的,中本聪大神用了椭圆加密算法(ECDSA)来产生比特币的私钥和公钥。
由私钥是可以计算出公钥的,公钥的值经过一系列数字签名运算会得到比特币地址。
比特币地址是由算法随机生成,那么就会有人问,既然都是随机生成的,那么比特币的地址会不会重复呢?关于这个问题,想必就更不用担心。
因为比特币的私钥长度是256位的二进制串,那么随机生成的两个私钥正好重复的的概率是2 ^ 256≈ 10 ^ 77之一,这个数字大到你根本无法想象,比中彩票的概率还要小好多;所以不用担心的啦,每个人的比特币地址都是独一无二的。
四、比特币公钥转地址工具
比特币公钥转地址的工具其实挺多的,网上随便一搜就有。最常用的就是bitaddress.org这种在线工具,直接把公钥输进去就能生成对应的比特币地址。不过要注意安全性,最好用离线版的工具。
具体转换过程是这样的:首先对公钥进行SHA256哈希,然后再进行RIPEMD160哈希,得到一个20字节的公钥哈希。接着加上版本前缀(比特币主网是0x00),再计算两次SHA256取前4字节作为校验码,最后用Base58编码就得到常见的1开头的比特币地址了。
如果不想用在线工具,可以用比特币核心钱包自带的命令行工具,或者一些开源的Python库比如pybitcointools也能实现这个功能。不过现在很多钱包都自动处理这些转换了,普通用户其实很少需要手动操作。
五、如何让自己的比特币消失
如何让自己的比特币消失,这是我们区块链研习社高级课程里的一个游戏环节,虽然通过语音方式讲解,但是希望更多人能动手参与。这个游戏表面看显得有些滑稽,但实际上我希望通过借助这次课让大家能够更深入理解比特币里的公私钥怎么回事,以及理解比特币这个全球最大分布式网络。
很多人开始知道了比特币,特别是上次“想哭”勒索病毒大规模爆发,更多的人知道了这个神奇的东西的存在。但是,绝大部分人能了解到的比特币仅仅局限于在某个交易所买到了一个叫做“比特币”的东西(当然还有一部分甚至不知道如何买卖,网上去查吧),但是对于这个“比特币”究竟是何物,是不是我们听过的、学习过的那个比特币,根本没有去深入思考这个问题。
通过前期的一个叫做“你怎么知道买的比特币是真的呢?”的课程,你应该知道我说的是什么,以及知道交易所的“比特币”远非我们的想象。
而这次的课程呢?你将更能加深对比特币的认识。
我们暂时仅仅从“加密货币”这个角度来说说比特币,所谓的比特币:
因此,从这个描述里我们可以知道,对公钥和私钥的理解非常关键(公私钥是我提到的“区块链学习的make集”的第一个),因为比特币在流转的过程中伴随着大量的公私钥计算和转换过程。当然,这个转换是单向的:通过私钥可以计算公钥,通过公钥无法计算私钥。
比特币通过公钥来生成收款地址,收款地址是不限制数量的,而实际上钱包程序(至少Bitcoin Core是这样)针对每个收款地址都有一个对应的私钥地址。下面是我实际操作过程中的一个截图:
在使用这个钱包的过程中要非常小心,因为Core钱包默认会对所有区块数据进行同步,通过提示来看,目前要同步至少120G的区块数据,如果一不小心,每次同步,硬盘会慢慢被塞满,所以记得关闭钱包界面右下角的网络图标。
上面是通过钱包对地址和私钥有一个基本的认识,而实际比特币在计算公私钥的时候还是“蛮复杂”的,因为很多人看不懂16进制,看不懂很多加密算法,所以碰到一个奇怪的字符或函数名都会头疼,比如ripemd160、sha256、base58等等。但如果能动手一下,其实并没想象中那么复杂。
下面是一个地址的计算的流程图:
有了这样一个计算过程,我们是如何实现让比特币“消失”的呢?其实,有种最笨的方法,就是生成一个公私钥,然后给对应的公钥地址转账,接下来把这个私钥扔掉或者彻底忘掉,那么以后没人能够还原这个私钥,不就实现“消失”了吗?
但是,英语里有句话说的是“no pain, no gain”,中文意思是“不劳无获”,代价不能白白花费呀,所以消耗了比特币,我们希望“永生”。这也是本次课程的终极目的:消失是为了永生!
在实现这个目的之前,我们要对比特币到底是什么进行重新考量:
作为今天的游戏实验,我们利用的是其中第3点:比特币是全球最大的分布式网络!由于这个网络里记录了所有的交易记录信息,因此,可能可以尝试把信息以交易的形式存储于这个永不灭亡的网络里。
好,原理搞清楚了,现在看怎么去做。回到上面的“地址计算流程”图,我们在第3步动点手脚。比如,我们需要将一条信息“Hello Bitcoin!”永久记录到区块链里,可以对这个字符进行sha256计算,于是生成一个哈希值,然后替换掉第3步中的值,并继续下面的生成过程,最后得到一个收款地址,假设是1DDiE5gkXGTnFS3TGXEV6SUVjEYnNDdfxH。
于是,这个收款地址就生成了,但是大家发现没,我们这里并没有产生私钥。而且根据公私钥的原理大家也知道:根据公钥计算出私钥几乎是不可能的。因此,这里我们给这个地址进行转账,于是交易记录就产生了,而且,做到了把“Hello Bitcoin!”这个字符串的哈希值永久地记录进了区块链里。
因此,我们所有的目的就实现了!
实际上,这不是我的首创,很多人都这么干过,很多人利用比特币的区块链网络是全球最大的分布式网络,而且寄生于互联网而存在,不可能消灭,因此将比特币作为底层,把大量的哈希值信息记录进去。大家看看下面这个图,每笔交易金额都是1聪:
看到这里,不知道大家是否理解了这样一个过程。比如上面这个图里面那一列收款地址,背后实际上可能会有一些特殊的含义。
最后,不要被这些貌似复杂的计算过程给吓到,因为不需要懂得这些函数的原理,这些函数在网络上是很容易获得的(有些可能要翻墙),我列出了一些,供大家学习和动手时使用:
今天课程到此结束,大家动起来吧,有问题留言交流。