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