這個題目一寫出來,筆者自己也思考了下自己在以前職業生涯中涉及到的加密解密技術,也思考了自己熟知的公知度高的幾種加密方式。 下面我來說說一些理解上的東西。 加密解密中間參與的是一個算法,有這個算法規律你才可以將簡單的語言或者數據轉換成只有了解此算法的人才能看懂才能知道其本身含義的語言或者是數據,你做的這部分工作其實就是在加密,別人理解的過程就是解密。 定義:把一段原始數據通過某種算法處理成另外一種數據(原始數據為明文,處理后的數據為密文)。明文->密文:稱之為加密。密文->明文:稱之為解密。 從圖中可以了解到對于加密、解密來講算法是非常關鍵。但是公知度高的算法都是公開的,一旦有人想要破解這個算法,而且能夠被破解了,則所有使用這個算法的產品都面臨要報廢、被盜版的危機。而且很多的時候做過開發的人就知道,替換一個算法的成本很大。因此一個加密出來的數據本身可靠與否,取決于密鑰,而不是算法,因為密鑰的調換成本比較低。 那么問題來了,什么是密鑰呢? 密鑰是一種參數,它是在明文->密文或密文->明文的算法中輸入的數據。分為對稱密鑰,非對稱密鑰。 顧名思義,對稱加密又稱為私鑰加密,發送方和接收方使用同一個密鑰區加密解密數據。優勢是加解密速度快適合于對大數據進行加密。但是密鑰管理困難。 非對稱加密:又稱公鑰加密。需要使用不同的密鑰來分別完成加密和解密操作。其中一個密鑰公開發布,即為公鑰。另一個由用戶自己秘密保存,即為私鑰。發送方用對方的公鑰加密數據,對方用自己的私鑰解密數據。缺點在于加密解密的速度比對稱密鑰慢很多。 關于算法這塊現在也就上面提到的對稱和非對稱兩類。在此簡單闡述下。對稱算法,即單向加密算法。 對稱算法: 對稱算法的缺點其實是很明顯的,因為其加密解密使用的都是相同的密鑰,那么在整個過程中密鑰存儲的安全性這塊就需要好好考量方案。優點前面也說過了,在此不累述。 非對稱算法: 從圖中可以看到加密和解密用到的不是同一個密鑰,發送方使用接收方的公鑰進行加密,接收方使用與之配合的私鑰進行解密,整個傳送過程中,加密后的數據只用接收方自己可以解密,因為只有他自己擁有私鑰。 相對來說非對稱算法比較安全,但是在實際使用中總歸是要考慮很多的情況,權衡所有的條件。因為歸根結底沒有哪種算法是絕對安全絕對完美的,所以讀者可以在自己的產品保密方案中涉及到幾種算法。 舉個簡單的例子:你可以把要傳遞給接收方的線路加密對稱秘鑰,用對非稱算法加密以密文的方式傳遞給接收方,用公鑰/私鑰加密,相對應的就是私鑰/公鑰解密。線路數據加密可以使用對稱算法加密數據。 把對稱算法和非對稱算法糅合到一起,可以保證數據的機密性,來源的合法性。但是數據本身的完整性又該如何解決?若是有非法截取,然后亂修改一通,破壞數據的完整性接收方又該如何判斷呢? 此問題的提出就涉及到了另外一種加密算法,即單項加密算法。準確來說,單向加密算法并不是一種加密技術,而是通過提取數據特征碼,來驗證數據的完整性。在單項算法的設計上需要考慮的兩個因素:雪崩現象和定長特征。雪崩現象:任何微小的變動都可以導致結果發生巨大的變化。定長特征:不論數據本身多長,提取的特征碼的長度都是固定的。 上面提到的這三種算法如果讀者在設計思路中有考慮并糅合在實際中使用。最終保證數據的完整性,可靠性,機密性以及來源的合法性。希望這篇整理能對于讀者在理解算法的概念上有些幫助!
|