說起區塊鏈,似乎大家都懂一點,再往細里一問,似乎又都不懂了。
比如,你問一個人:為什么要挖礦,挖的到底是啥。
怕是沒幾個明白人。
本文就是要給你講明白!
前言
人們一說起區塊鏈,就常常說防篡改防篡改,那么,這個防篡改是怎么做到的呢。
主要靠HASH。
人們所常說的挖礦,其實是在挖HASH。
挖一個長得很好看的HASH。
但,什么是HASH?
外行人是說不清的,內行人,似乎也很少能給外行人講明白。
很多人喜歡用比喻的方式給外行人講HASH,其實,你就是弄100個比喻(什么麻將、撲克、骰子啥的),不懂HASH的人還不懂。
他們中比較傻白甜的,甚至會想,挖礦是在挖麻將嗎?
真正想弄明白HASH,就讓他看看HASH長什么樣子唄??!
HASH到底是個啥
HASH是一個算法,你給它一串數,它給你一串數。
你給它的叫輸入,它給你的叫輸出。
也就是說,將數據輸入給HASH函數,HASH函數輸出一串數。
HASH( 輸入 )= 輸出
這就好比你把一頭豬輸入給一個香腸機,香腸機給你輸出一段香腸。
看個例子吧,我們以最常見的HASH算法MD5為例。(當然,有很多種HASH算法,MD5是其中最知名的一個。)
MD5 ("weijianfan") = c49262b1117b9fd1d6ebd74aaa016f3e
上面這個例子中,“weijianfan”是輸入,后面那串數是輸出。
再如:
MD5 ("weiyuerenhua") = a799c7c504a1a80f95ebe69a86c42637
注意,HASH函數有個重要的特點,不管輸入多長,輸出都是固定長度的。
當然,和一般的算法一樣,只要輸入不變,輸出是不變的。
比如MD5,輸入是不限制長度的,輸出就是128位的二進制,也就是16個字節的十六進制。像上面第一個例子里,c4就是一個字節,代表了8位的二進制,即11000100,最后那個3e也是一個字節,也即00111110
我們把輸入搞長點:
MD5 ("In Math We Trust.") = 767fa54f12bab6b71fb411f265814bb7
把漢字作為輸入:
MD5 ("博鰲亞洲論壇2021年年會數字支付與數字貨幣分論壇4月18日晚舉行。") =
36b5e89c797d22d14ccefe4ec79f56c2
再搞長點:
MD5 ("Andreas M. Antonopoulos is a noted technologist and serial entrepreneur who has become one of the most well-known and well-respected figures in bitcoin. An engaging public speaker, teacher, and writer, Andreas makes complex subjects accessible and easy to understand. Andreas advises multiple technology startups and speaks regularly at conferences and community events around the world.") = 5ac503b01e213d4794d92134096ad313
長一點的漢字:
MD5 ( "Andreas M. Antonopoulos 是?位著名的技術學家和連續創業企業家,?特幣界最著名和倍受尊敬的?物之?。?為?名迷 ?的公共演說家、教師和作家,他善于把復雜的問題變得簡單?易于理解。作為?名顧問,他則幫助初創者認知、評估并指 引減?安全和業務風險。") =
90f039293e0b3da5516e251b93434795
HASH還有一個特點,只要輸入有一點點的變化,輸出都會完全不同,就好像輸入是完全不同的。
比如把上面這段文字中“一位”里的“一”字刪掉,再做HASH:
MD5 ("Andreas M. Antonopoulos 是位著名的技術學家和連續創業企業家,?特幣界最著名和倍受尊敬的?物之?。?為?名迷 ?的公共演說家、教師和作家,他善于把復雜的問題變得簡單?易于理解。作為?名顧問,他則幫助初創者認知、評估并指 引減?安全和業務?險。") =
159c9d192e45fbd2eaa0c3f068a78508
看到了吧,輸入有微小的變化,輸出會完全不同。
HSAH對輸入是不挑的,不管是字符串,還是文件,不管是文本、圖像、視頻,只要是數字的,都當作二進制輸入就是了。
比如,把下面這幅圖像給MD5,可以得到:
MD5 (Emily Blunt.jpg) = b818d284ef28f733c701f7bc1ee5f669
如果你的電腦上有md5工具,你就可以試試自己做HASH,比如在mac電腦里,在“終端”中輸入md5 -s "xxx",或者md5 1.txt就可以對字符串或者文件進行md5。
若干G的視頻文件也沒問題:
MD5 (偉大的轉折-01.mp4) =
9093c85d13f79609978f52c48e19aa65
圖|38集革命歷史劇《偉大的轉折》,遵義會議會址
你哪怕是改動了這個視頻中任何一幀的任何一個像素,MD5算出來的結果都截然不同。
所以,判斷一個文件是不是被人改動過,算一下HASH就行,HASH只要沒變,文件就沒有被動過。(前提是這個HASH算法還不錯?。?/p>
現在你對HASH大概有點印象了吧,反正只要是數字的輸入,都能給你整出一段固定長度的輸出,而且個個都不一樣。






