哈希算法——区块链的基本构成
Alex361
发表于 2022-12-26 16:37:22
159
0
0
哈希的算法有很多种类,在比特币系统中使用的是SHA-256和RIPEMD-160算法。不过除了生成地址的其中一个环节外使用到RIPEMD-160算法外(由于RIPEMD也是哈希算法的一种,RIPEMD-160有时候也被称为哈希160),其它使用哈希运算的地方的都是用SHA-256算法。4 Q; X6 a& v4 g3 D6 z
哈希256算法提供了由数字和字母构成的长度为64的十六进制字符串,该算法有个特点,就是不管你输入的是一个词语还是一本书的内容,比如输入《红楼梦》这本巨著,最终生成的哈希值都是64个字符串。而且只要输入信息有一小点变化,比如一个空格或一个小数点,输出的哈希值都会变化。, |9 f4 i3 X/ N
该算法除了有输出长度固定的特点外,还有单向不可逆以及防止篡改特性,就是说如果输入A,经过哈希运算得到B,但不能够输入B而反推得到A;
另外就是输入的A中,只要有一小点改变,如一个字母或一个字节的变动,经过哈希算法得出来数值都会有改变,就不是之前的B了。& E4 @7 X2 e: f% K9 ~# b$ p! M8 J0 D
由于哈希算法得出的哈希值是固定长度,即范围有限,但输入数据却是无限的。那就存在着两个不同的A,经过哈希算法之后得到相同的B的可能性,这种情况就叫“哈希碰撞”。9 |; { `2 h* ^8 x7 p& _
比特币系统就巧妙利用这个“哈希碰撞”,让矿工们用穷举法不断去运算出哈希值,即工作量证明方式去碰撞出正确答案的哈希值,谁第一个碰撞出来谁就获得比特币奖励,故此挖矿的算力实际指的是每秒钟多少次哈希碰撞。* b% x9 R8 ~& V4 t% \& g: {0 ~
下面举例说明:/ b/ O1 e3 V# V* F8 g \4 a/ q
假设现在有交易数据C、D、E,随机数用Nonce表示,难度要求是哈希值必须是000开头,那么系统里计算的哈希值如下:
Ha1= Hash(C+Nonce1)# R3 {2 h/ u' {* Q: |
Ha2= Hash(D+ Ha1+Nonce2)5 \3 m! J+ h9 P# b& K* X' g- l
Ha3= Hash(E+ Ha2+Nonce3)
同时要求Ha1、Ha2、Ha3都是000开头。在这种情况下由于哈希值不能逆推,而C、D、E的数值已经确定,那就只能不断地去试随机数Nonce,直到找到满足Ha1、Ha2、Ha3都是000开头的数值,这个试的过程就形象称之为挖矿。
成为第一个吐槽的人