哈希看起來就像是一串64位的隨機的16進制的字符串, 本質上是某些數字數據的一個指紋; 也就是說每一個不一樣的(文本)內容都有對應不一樣的指紋(哈希值)算法
先來看看下圖中的演示, 咱們在data區內輸入任意內容, 下面的hash區內就會自動實時計算與之對應的Hash值;而且data區的內容不論是隻有1個字符, 仍是你把整個圖書館的內容都錄進去, hash獲得的永遠是一串64個字符的哈希值, 同時你永遠也不可能事先猜獲得你輸入的內容將獲得什麼樣的哈希值安全
利用這個特性, 咱們就能夠針對你要保護的內容進行哈希並保存下來,分佈式
在此基礎上, 咱們把它拓展成稱爲BLOCK的東西, 它至少包含學習
Block - 在本例中它只是個序號,每一個塊都有不同的序號 Nonce - 隨機數, 後面會講到 Data - 內容區
常見的作法是先把這幾個數據加起來, 能夠理解爲區塊頭: 區塊序號+Nonce(隨機值)+data(需保護的內容區)區塊鏈
即便正式應用中會有更多的數據, 好比要加上密鑰和時間戳, 但基本原理是相通的加密
而後把這些內容進行SHA256運算加密, 獲得一串64位的哈希值, 若是內容被篡改,那麼這串哈希值必然會變化spa
明白了哈希值如何產生, 接下來看下一步: 挖礦code
仔細且耐心觀察下圖, 在點擊了[Mine]按鈕後,通過較長時間的運算,獲得了4個0開頭的哈希值blog
這是個相對罕見的散列(哈希)值, 咱們能夠認定它就是這個區塊的指紋, 若是這時你嘗試去修改data區內容, 會發現hash值發生變化, 而且再也不是4個0開頭, 證實這個區塊被篡改過了字符串
像下圖, 若是內容被修改, 哈希變成了不是4個0開頭, 而且背景變成了紅色, 你就能夠知道這個塊的內容再也不是有效的或簽過名的, 它已經被篡改過,不安全的了.
這時從新Mine一下, 等待一段時間後,從新獲得4個0開頭的哈希值;
要注意的是Nonce變化了! 這是Nonce在這裏出現的緣由!!
不一樣的內容, 須要匹配不一樣的Nonce才能獲得4個0開頭的哈希值, Mine的過程其實就是算法在尋找合適的隨機數搭配內容以使得再次獲得4個0開頭的哈希值,
在尋找Nonce的過程, 就叫挖礦!
如今明白爲何要挖礦了, 接下來把上面的知識串起來, 造成鏈
對每一個區塊頭進行SHA256加密哈希,可生成一個哈希值。經過這個哈希值,能夠識別出區塊鏈中的對應區塊。同時,每個區塊均可以經過其區塊頭的「父區塊哈希值」字段引用前一區塊(父區塊)。也就是說,每一個區塊頭都包含它的父區塊哈希值。這樣把每一個區塊連接到各自父區塊的哈希值序列就建立了一條一直能夠追溯到第一個區塊(創世區塊)的鏈條。
看下圖是個由4個塊組成的鏈, 每一個塊都有負責記住上個塊的prevhash, 以及本身的hash, 一個串一個, 就造成了鏈
在這個鏈條上, 若是中間的塊被惡意修改了數據,會發生什麼?
在下圖的演示中能夠看到, 若是第2個區塊被惡意修改數據的話, 從第2個塊起就會因哈希值(指紋)變化致使它和後面的哈希值所有出問題, 安全校驗會檢測出有區塊出問題!
接下來怎麼解決這個問題呢?
就會涉及到分佈式存儲的問題, 要把這個鏈條(數據)存放到各個終端去-----去中心化!
並加入投票機制, 當有鏈條的數據出問題時, 用多數正確的連接替換掉出問題的鏈條, 以保存數據的正確性
這也是咱們常說的除非你能黑掉51%的數據(鏈條), 才能真正篡改掉數據的真正緣由所在!
上文只是簡單講了一下區塊鏈的一些基本運做原理, 真想掌握的還要深刻學習
但對於只想知道區塊鏈是怎麼回事的朋友, 應該足夠了