JAVA之凱撒加密【解密】
阿新 • • 發佈:2019-01-06
1、凱撒加密(Caesar cipher)是一種簡單的訊息編碼方式:它根據字母表將訊息中的每個字母移動常量位k。舉個例子如果k等於3,則在編碼後的訊息中,每個字母都會向前移動3位:a會被替換為d;b會被替換成e;依此類推。字母表末尾將回捲到字母表開頭。於是,w會被替換為x,x會被替換為a。
1>開啟記事本,寫如下一段程式碼:
2>開啟記事本,寫如下一段程式碼:
開啟dos執行視窗,輸入d:轉到D盤,接下來輸入cd InputTest轉到InputTest目錄下:
輸入Javac Switcher.java 回車 java Switcher。
1>開啟記事本,寫如下一段程式碼:
儲存為Encryption.java【同上節,我還是把他放在了D盤下InputTest資料夾內】import java.util.HashMap; import java.util.Map; public class Encryption { private static Map<Character, Character> map = new HashMap<Character, Character>(); static { map.put('a', 'd'); map.put('b', 'e'); map.put('c', 'f'); map.put('d', 'g'); map.put('e', 'h'); map.put('f', 'i'); map.put('g', 'j'); map.put('h', 'k'); map.put('i', 'l'); map.put('j', 'm'); map.put('k', 'n'); map.put('l', 'o'); map.put('m', 'p'); map.put('n', 'q'); map.put('o', 'r'); map.put('p', 's'); map.put('q', 't'); map.put('r', 'w'); map.put('s', 'v'); map.put('t', 'u'); map.put('w', 'x'); map.put('v', 'y'); map.put('u', 'z'); map.put('x', 'a'); map.put('y', 'b'); map.put('z', 'c'); } /** * 加密 * */ public String encrypt(String s) { if (s == null || s.equals("")) { return s; } char c; String result = ""; for(int i = 0;i < s.length();i++){ c = s.charAt(i); if(map.containsKey(c)){ result += map.get(c); }else{ result += c; } } return result; } }
2>開啟記事本,寫如下一段程式碼:
儲存為Decryption.java【同上節,我還是把他放在了D盤下InputTest資料夾內】 3>開啟記事本,寫如下一段程式碼:import java.util.HashMap; import java.util.Map; public class Decryption { private static Map<Character, Character> map = new HashMap<Character, Character>(); static { map.put('d', 'a'); map.put( 'e','b'); map.put('f', 'c'); map.put('g', 'd'); map.put('h', 'e'); map.put('i', 'f'); map.put('j', 'g'); map.put('k', 'h'); map.put('l', 'i'); map.put('m', 'j'); map.put('n', 'k'); map.put('o', 'l'); map.put('p', 'm'); map.put('q', 'n'); map.put('r', 'o'); map.put('s', 'p'); map.put('t', 'q'); map.put('w', 'r'); map.put('v', 's'); map.put('u', 't'); map.put('x', 'w'); map.put('y', 'v'); map.put('z', 'u'); map.put('a', 'x'); map.put('b', 'y'); map.put('c', 'z'); } /** * 解密 */ public String decrypt(String s){ if(s == null || s.equals("")){ return s; } char c; String result = ""; for(int i = 0;i < s.length();i++){ c = s.charAt(i); if(map.containsKey(c)){ result += map.get(c); }else{ result += c; } } return result; } }
儲存為 Switcher.java【同上節,我還是把他放在了D盤下InputTest資料夾內】import java.util.Scanner; public class Switcher { public static void main(String[] args){ System.out.println("******************歡 迎 使 用凱撒加密器******************"); Scanner input = new Scanner(System.in); System.out.print("\n請選擇操作(1.加密,2.解密): "); int operator = input.nextInt(); if(operator == 1){ System.out.print("請輸入待加密的字串:"); String source = input.next(); Encryption encryption = new Encryption(); String encrytStr = encryption.encrypt(source); System.out.println("加密後的字串是:"); System.out.println(encrytStr); }else if(operator == 2){ System.out.print("請輸入待解密的字串:"); String source = input.next(); Decryption decryption = new Decryption(); String decryptStr = decryption.decrypt(source); System.out.println("解密後的字串是:"); System.out.println(decryptStr); }else{ System.out.println("操作失誤"); } } }
開啟dos執行視窗,輸入d:轉到D盤,接下來輸入cd InputTest轉到InputTest目錄下:
輸入Javac Switcher.java 回車 java Switcher。
我們加密:admin和解密:admin;結果如下圖