03.02 聯邦學習重要技術解讀——你不得不知道的加密算法

數據加密是聯邦學習的一個重要環節,對於數據隱私保護起著至關重要的作用,本期推送將介紹常用的加密算法,並且給出部分加密算法基於Java的算法實現。

”——來自“雲時代架構”


01 加密算法的主要類別


常用的加密算法有對稱加密算法,非對稱加密算法,哈希算法等。


對稱加密,加密和解密是對稱的,加密時用一個秘鑰去加密,解密時用同一個秘鑰去解密,由信息發送方和接收方共同約定一個秘鑰。缺點是風險都在這個秘鑰上面,一旦秘鑰被竊取,信息會暴露,所以安全級別不夠高。常用對稱加密算法有DES,3DES,AES等。


非對稱加密顧名思義就是加密與解密的過程不是對稱的,不是用同一個秘鑰。非對稱加密有公私鑰對的概念,也就是有兩把秘鑰,一把是公鑰,一把是私鑰,一對公私鑰有固定的生成方法,在加密的時候,用公鑰去加密,接收方再用對應的私鑰去解密。使用時可以由接收方生成公私鑰對,然後將公鑰傳給加密方,這樣私鑰不會在網絡中傳輸,沒有被竊取的風險。通過和對稱加密的對比,可以看到,非對稱加密解決了秘鑰傳輸中的安全問題。常用非對稱加密算法有RSA,ECC等。


哈希算法簡單說就是將任意數據都轉換成一個固定長度的字符串,通過哈希後的值幾乎無法推導出原文,而且兩個不同的原文哈希後結果一定不同。常用算法有MD5,SHA-256等等。


此外,Base58和Base64也是常用的加密算法,下面將對常用的加密算法進行詳細介紹。


02 常用加密算法詳解

1、 MD5

MD5是哈希算法的典型代表,全稱叫Message-Digest Algorithm 5,用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一,基本原理是將數據運算為另一固定長度值,MD5的前身有MD2、MD3和MD4。


MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式,即把一個任意長度的字節串變換成一定長的十六進制數字串。

Java的JDK就自帶了MD5加密算法,可以直接調用,使用非常方便。


MD5算法具有以下特點:

  • 壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
  • 容易計算:從原數據計算出MD5值很容易。
  • 抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
  • 強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

2、SHA-256

SHA-256也屬於哈希算法,是安全散列算法(Secure Hash Algorithm,簡稱SHA)的一種。SHA算法是一個密碼散列函數家族,SHA算法能計算出一個數字消息所對應到的、長度固定的字符串,且若輸入的消息不同,它們對應到不同字符串的機率很高。SHA家族包括五個算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。


說簡單來說,SHA-256算法就是將一個對象的多個關鍵不重複信息組合起來,通過算法生成一個加密字符串。下面是Java中SHA-256算法的具體內容:

聯邦學習重要技術解讀——你不得不知道的加密算法


下面是算法的測試類內容:

聯邦學習重要技術解讀——你不得不知道的加密算法


運行可以看到如下結果:

聯邦學習重要技術解讀——你不得不知道的加密算法


3、Base64&Base58

Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,是一種基於64個可打印字符來表示二進制數據的方法。

Base64編碼是從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。例如,在Java的Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一標識符編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL中的形式。此時,採用Base64編碼具有不可讀性,需要解碼後才能閱讀。


Java中使用Base64也非常簡單,jdk的工具包中自帶Base64的工具類,先新建一個工具類:

聯邦學習重要技術解讀——你不得不知道的加密算法


Base64的加密過程是可逆的,加密解密內容如下:

聯邦學習重要技術解讀——你不得不知道的加密算法


可以看到使用非常簡單,下面是測試類內容:

聯邦學習重要技術解讀——你不得不知道的加密算法


執行測試方法,結果如下:

聯邦學習重要技術解讀——你不得不知道的加密算法


Base58和Base64類似,也是一種將二進制轉為可視字符串的算法,它和Base64的主要區別是,轉換出來的字符串去除了幾個看起來會產生歧義的字符,如 0 (零), O (大寫字母O), I (大寫的字母i) and l (小寫的字母L) ,和幾個影響雙擊選擇的字符如“/”和“+”,結果字符集正好58個字符(包括9個數字,24個大寫字母,25個小寫字母)。Base58是站在使用者的角度考慮的,比Base64更加人性化。


Java中Base58算法的使用也很便捷,新建一個Base58的工具類,目錄結構如下:

聯邦學習重要技術解讀——你不得不知道的加密算法

工具類的大概內容結構如下:

聯邦學習重要技術解讀——你不得不知道的加密算法

下面是測試代碼:

聯邦學習重要技術解讀——你不得不知道的加密算法


運行結果如下:

聯邦學習重要技術解讀——你不得不知道的加密算法


更詳細的內容可查看項目代碼:https://github.com/guoyb1990/btc-demo.git


-END-


投稿或尋求報道:[email protected]


聯邦學習重要技術解讀——你不得不知道的加密算法


長按掃描上方二維碼加關注,

為您送上源源不斷的前沿知識!


分享到:


相關文章: