使用Java加密與解密實現步驟

banq發表於2022-06-15

密碼學處理數字資料的實際保護。它是指基於數學演算法的機制設計,提供基本的資訊保安服務。您可以將密碼學視為建立一個廣泛的工具包,其中包含安全應用程式中的不同技術。

什麼是密碼分析?
破解密文的藝術和科學被稱為密碼分析。密碼分析是密碼學的姊妹分支,它們共存。加密過程產生用於傳輸或儲存的密文。它涉及對密碼機制的研究,旨在破解它們。密碼分析也用於新密碼技術的設計以測試其安全強度。

密碼學原語
密碼學原語只不過是密碼學中的工具和技術,可以有選擇地用於提供一組所需的安全服務 -

  • 加密
  • 雜湊函式
  • 訊息驗證碼 (MAC)
  • 數字簽名


Java中的密碼學
Java Cryptography Architecture (JCA) 是一組 API,用於實現現代密碼學的概念,例如數字簽名、訊息摘要、證照、加密、金鑰生成和管理、安全隨機數生成等。使用 JCA 開發人員可以透過以下方式構建他們的應用程式將安全性融入其中。要在您的應用程式中整合安全性,而不是依賴於複雜的安全演算法,您可以輕鬆呼叫 JCA 中提供的相應 API 來獲取所需的服務。

Java Cryptography - 加密和解密資料
您可以使用 javax.crypto 包的 Cipher 類對資料進行加密和解密。按照下面給出的步驟使用 Java 解密給定的資料。

第 1 步:建立 KeyPairGenerator 物件
KeyPairGenerator 類提供 getInstance() 方法,該方法接受表示所需金鑰生成演算法的字串變數並返回生成金鑰的 KeyPairGenerator 物件。

使用 getInstance() 方法建立 KeyPairGenerator 物件,如下所示。

//建立 KeyPair 生成器物件
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");



步驟 2:初始化 KeyPairGenerator 物件
KeyPairGenerator 類提供了一個名為 initialize() 的方法,該方法用於初始化金鑰對生成器。此方法接受一個表示金鑰大小的整數值。

使用 initialize() 方法初始化上一步建立的 KeyPairGenerator 物件,如下所示。

//初始化KeyPairGenerator
 keyPairGen.initialize(2048);


第 3 步:生成 KeyPairGenerator
您可以使用 KeyPairGenerator 類的 generateKeyPair() 方法生成 KeyPair。使用此方法生成金鑰對,如下所示。

//生成金鑰對
KeyPair pair = keyPairGen.generateKeyPair();


第四步:獲取公鑰
您可以使用 getPublic() 方法從生成的 KeyPair 物件中獲取公鑰,如下所示。

//從金鑰對中獲取
PublicKey PublicKey publicKey = pair.getPublic();


第 5 步:建立一個 Cipher 物件
Cipher 類的 getInstance() 方法接受一個表示所需轉換的字串變數,並返回一個實現給定轉換的 Cipher 物件。

使用 getInstance() 方法建立 Cipher 物件,如下所示。

//建立一個 Cipher 物件
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");


第 6 步:初始化 Cipher 物件

Cipher 類的 init() 方法接受兩個引數

  • 表示操作模式的整數引數(加密/解密)
  • 表示公鑰的金鑰物件

使用 init() 方法初始化 Cypher 物件,如下所示。

//初始化一個Cipher物件
cipher.init(Cipher.ENCRYPT_MODE, publicKey);


第 7 步:將資料新增到 Cipher 物件
Cipher 類的 update() 方法接受一個表示要加密的資料的位元組陣列,並使用給定的資料更新當前物件。

透過將資料以位元組陣列的形式傳遞給 update() 方法來更新初始化的 Cipher 物件,如下所示。

//向密碼中新增資料
byte[] input = "Hello there, this is group 01".getBytes(); 
cipher.update(輸入);


第 8 步:加密資料
Cipher 類的 doFinal() 方法完成了加密操作。因此,使用該方法完成加密,如下所示。

//加密資料
byte[] cipherText = cipher.doFinal();


第 9 步:初始化 Cipher 物件以進行解密
要解密在前面的步驟中加密的密碼,您需要對其進行初始化以進行解密。

因此,透過傳遞引數 Cipher.DECRYPT_MODE 和 PrivateKey 物件來初始化密碼物件,如下所示。

//為解密初始化相同的密碼
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());


第 10 步:解密資料
最後,使用 doFinal() 方法解密加密文字,如下所示。

//解密文字
byte[] decipheredText = cipher.doFinal(cipherText);



非對稱密碼學的優缺點是什麼
非對稱加密的好處包括:

  • 由於不需要交換金鑰,因此消除了金鑰分配問題。
  • 由於不必將私鑰傳輸或透露給任何人,因此安全性得到了提高。
  • 啟用了數字簽名的使用,以便收件人可以驗證訊息是否來自特定的發件人。
  • 它允許不可否認性,因此發件人不能拒絕傳送訊息。
  • 非對稱密碼學的缺點包括:


與對稱密碼學相比,這是一個緩慢的過程。因此,它不適合解密批次訊息。
  • 如果一個人丟失了他的私鑰,他就無法解密他收到的訊息。
  • 因為公鑰沒有經過身份驗證,所以沒有人可以確保公鑰屬於指定的人。因此,使用者必須驗證他們的公鑰是否屬於他們。
  • 如果惡意行為者識別出一個人的私鑰,攻擊者就可以讀取該人的訊息。


常見的安全挑戰
管理金鑰是一個熱門問題,尤其是在處理資料訪問許可權、外包的法律後果以及如何降低風險時。我們聽到的常見問題:我如何保護我的公司?我們已經遷移到雲端,但誰是資料的實際所有者?我在雲中有哪些保護措施?如果我擁有我的所有資訊,包括我在某個雲提供商中的加密金鑰,並且他們被傳喚,會發生什麼?如果我的組織被傳喚,資料會怎樣?

其他雲和安全考慮因素是單源雲提供商或多雲;資料如何移動;以及組織如何在保持資料安全的同時保持對資料的控制。

歸根結底,組織希望提高其資料安全性。直到最近,許多組織一直在對其金鑰管理採取極簡主義的方法。隨著組織的發展,許多人發現構建他們的加密架構來管理 PKI、身份管理和靜態資料具有挑戰性。他們必須改掉一些壞習慣,特別是在金鑰和證照管理方面,既要為今天而建,也要為明天做計劃。

相關文章