為了保證程式的安全,經常採用資料加密的方法。Java 中提供了專門用於加密運算的類和介面。
除了使用加密類和介面外,還可以通過多種方式實現字串的加密。其中常用的就是獲取字串的位元組陣列,之後對位元組陣列中的每個位元組都進行運算,得到新的內容,這時所獲得的字串與原字串將不相同,以此達到加密的效果;解密時再將加密字串進行相反的運算,這樣即可得到原字串。
本範例簡單介紹如何通過資料運算實現字串的加密和解密,實現步驟如下。
(1) 建立一個靜態的 encryptAndDencrypt() 方法,在該方法中傳入兩個引數。程式碼如下:
public static String encryptAndDencrypt(String value, char secret) {
byte[] bt = value.getBytes(); // 將需要加密的內容轉換為位元組陣列
for (int i = 0; i < bt.length; i++) {
bt[i] = (byte) (bt[i] ^ (int) secret); // 通過互斥或運算進行加密
}
String newresult = new String(bt, 0, bt.length); // 將加密後的字串儲存到 newresult 變數中
return newresult;
}
上述程式碼首先將需要加密的內容轉換為位元組陣列,接著遍歷位元組陣列中的內容,在 for 語句中通過互斥或運算進行加密,然後將加密後的字串儲存到 newresult 變數中。最後返回 newresult 變數的值。
(2) 在 main() 方法中新增程式碼,接收使用者在控制台輸入的內容並輸出,然後呼叫 encryptAndUncrypt() 方法對字串分別進行加密和解密,並將加密和解密後的內容輸出。程式碼如下:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char secret = '8'; // 加密文字元
System.out.println("請輸入您想加密的內容:");
String pass = scan.next();
System.out.println("原字串內容:" + pass);
String encryptResult = encryptAndDencrypt(pass, secret);
System.out.println("加密後的內容:" + encryptResult);
String uncryptResult = encryptAndDencrypt(encryptResult, secret);
System.out.println("解密後的內容:" + uncryptResult);
}
(3) 執行上述程式碼進行測試,如下所示。
請輸入您想加密的內容:
hello,java
原字串內容:hello,java
加密後的內容:P]TTWRYNY
解密後的內容:hello,java