哈希算法——区块链的基本构成
Alex361
发表于 2022-12-26 16:37:22
135
0
0
哈希的算法有很多种类,在比特币系统中使用的是SHA-256和RIPEMD-160算法。不过除了生成地址的其中一个环节外使用到RIPEMD-160算法外(由于RIPEMD也是哈希算法的一种,RIPEMD-160有时候也被称为哈希160),其它使用哈希运算的地方的都是用SHA-256算法。% L2 i7 G3 E* P, v& v6 c+ ^: {
哈希256算法提供了由数字和字母构成的长度为64的十六进制字符串,该算法有个特点,就是不管你输入的是一个词语还是一本书的内容,比如输入《红楼梦》这本巨著,最终生成的哈希值都是64个字符串。而且只要输入信息有一小点变化,比如一个空格或一个小数点,输出的哈希值都会变化。, R# K, I5 c6 U3 X$ M
该算法除了有输出长度固定的特点外,还有单向不可逆以及防止篡改特性,就是说如果输入A,经过哈希运算得到B,但不能够输入B而反推得到A;6 s$ V8 M9 V* l% I% u5 p% ^
另外就是输入的A中,只要有一小点改变,如一个字母或一个字节的变动,经过哈希算法得出来数值都会有改变,就不是之前的B了。1 T% H. v- P& A9 H; M4 J! s
由于哈希算法得出的哈希值是固定长度,即范围有限,但输入数据却是无限的。那就存在着两个不同的A,经过哈希算法之后得到相同的B的可能性,这种情况就叫“哈希碰撞”。5 g E& j7 A) p5 M$ H
比特币系统就巧妙利用这个“哈希碰撞”,让矿工们用穷举法不断去运算出哈希值,即工作量证明方式去碰撞出正确答案的哈希值,谁第一个碰撞出来谁就获得比特币奖励,故此挖矿的算力实际指的是每秒钟多少次哈希碰撞。
下面举例说明:
假设现在有交易数据C、D、E,随机数用Nonce表示,难度要求是哈希值必须是000开头,那么系统里计算的哈希值如下:" W8 }& I6 \2 n: e
Ha1= Hash(C+Nonce1); B; P' {' o: `$ d0 l
Ha2= Hash(D+ Ha1+Nonce2)0 ^" \/ Q1 S7 N" x1 i7 C
Ha3= Hash(E+ Ha2+Nonce3)
同时要求Ha1、Ha2、Ha3都是000开头。在这种情况下由于哈希值不能逆推,而C、D、E的数值已经确定,那就只能不断地去试随机数Nonce,直到找到满足Ha1、Ha2、Ha3都是000开头的数值,这个试的过程就形象称之为挖矿。
成为第一个吐槽的人