◇區塊鏈的加密技術
1.哈希函數
哈希函數不是指某種特定的函數,而是一類函數,有多種實現方式。
(1)定義。百度百科給出的定義是:“Hash,一般翻譯作‘散列’,也有直接音譯為‘哈希’的,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。”
維基百科則直接將哈希函數的詞條定義到散列函數中:“散列函數(Hash Function)又稱散列算法、哈希函數,是一種從任何一種數據中創建小的數字‘指紋’的方法。該函數將數據打亂混合,重新創建一個叫作散列值的指紋。散列值通常由一個較短的隨機字母和數字組成的字符串來代表。”
百度百科與維基百科都提到了一個概念:哈希函數(散列函數)能夠將任意長度的輸入值轉變成固定長度的輸出值,該值稱為散列值,輸出值通常為字母與數字的組合。
(2)性質。所有的散列函數都有這樣一個基本特性:如果兩個散列值是不相同的(根據同一函數),那么這兩個散列值的原始輸入也是不相同的。該特性是散列函數具有確定性的結果。但是,散列函數的輸入和輸出不是一一對應的,如果兩個散列值相同,兩個輸入值很可能也是相同的,但不能肯定二者一定相同。輸入一些數據,計算出散列值,然后部分改變輸入值,一個具有強混淆特性的散列函數就會產生完全不同的散列值。
典型的散列函數都有無限定義域,比如,任意長度的字節字符串和有限的值域;固定長度的比特串。在某些情況下,散列函數可以設計成具有相同大小的定義域和值域間的一一對應。
(3)常用的Hash函數包括如下幾種:
①數字分析法。對一組數據進行分析,比如,一組員工的出生年月日,如果出生年月日的前幾位數字大體相同,出現沖突的概率就會很大;如果年月日的后幾位表示月份和具體日期的數字差別很大,用后面的數字來構成散列地址,沖突的概率就會明顯降低。因此,所謂數字分析法就是找出數字規律,盡可能地利用這些數據來構造沖突概率較低的散列地址。
②直接尋址法。取關鍵字或關鍵字的某個線性函數值為散列地址,即H(key)=key或H(key)=a·key+b,其中a和b為常數。這種散列函數,叫自身函數。
③折疊法。首先,將關鍵字分割成位數相同的幾部分,最后一部分位數可以不同;然后,取幾部分的疊加和(去除進位)作為散列地址。
④隨機數法。選擇一個隨機函數,取關鍵字作為隨機函數的種子,生成隨機值,作為散列地址。通常,用于關鍵字長度不同的場合。
⑤平方取中法。簡而言之,就是取關鍵字平方后的中間幾位作為散列地址。
2.非對稱加密
(1)該法是一種密鑰的保密方法。非對稱加密算法需要兩個密鑰:公鑰和私鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰并將公鑰公開,向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密,再發送給甲方;甲方用自己私鑰對加密后的信息進行解密。甲方想要回復乙方時,過程正好相反。
非對稱加密,算法強度復雜,安全性依賴于算法與密鑰。可是,由于算法復雜,使得加密、解密速度比對稱加密、解密速度慢一些。
與對稱加密算法相比,非對稱加密的安全性更好,對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。而非對稱加密使用一對密鑰,一個用來加密,一個用來解密,且公鑰是公開的,密鑰是自己保存的,不需要像對稱加密那樣在通信之前要先同步密鑰。
(2)非對稱加密工作原理。下面是非對稱加密的工作原理:
①在傳輸過程中,即使攻擊者截獲了傳輸密文,并得到了乙方的公鑰,也無法破解密文,因為只有乙方的私鑰才能解密密文。同樣,如果乙方要回復加密信息給甲方,就需要甲方先給乙方公布甲方的公鑰用于加密,甲方自己保存自己的私鑰用于解密。
②乙方用自己保存的另一把專用密鑰(私鑰)對加密后的信息進行解密。乙方只能用其專用密鑰(私鑰)解密由對應的公鑰加密后的信息。
③甲方得到該公鑰,使用該密鑰對機密信息進行加密,再發送給乙方。
④乙方生成一對密鑰(公鑰和私鑰),將公鑰向其他方公開。
(3)非對稱加密方法。公鑰私鑰的使用原則如下:
①用其中一個密鑰能解密數據,則該數據必然是對應的那個密鑰進行的加密。
②在密鑰對中,能讓大家都知道的是公鑰;不告訴大家、只有自己知道的,是私鑰。
③用一個密鑰加密數據,只有對應的密鑰才可以解密。
④每一個公鑰對應一個私鑰。
- Functional Python Programming
- Spring 5企業級開發實戰
- iOS 9 Game Development Essentials
- Visual Basic 6.0程序設計計算機組裝與維修
- JavaScript語言精髓與編程實踐(第3版)
- Spring Boot+Spring Cloud+Vue+Element項目實戰:手把手教你開發權限管理系統
- React.js Essentials
- Hands-On JavaScript High Performance
- 游戲程序設計教程
- Python Data Analysis Cookbook
- Working with Odoo
- 快速入門與進階:Creo 4·0全實例精講
- Groovy 2 Cookbook
- Java EE項目應用開發
- 讀故事學編程:Python王國歷險記