1. 程式人生 > >JAVA之凱撒加密【解密】

JAVA之凱撒加密【解密】

1、凱撒加密(Caesar cipher)是一種簡單的訊息編碼方式:它根據字母表將訊息中的每個字母移動常量位k。舉個例子如果k等於3,則在編碼後的訊息中,每個字母都會向前移動3位:a會被替換為d;b會被替換成e;依此類推。字母表末尾將回捲到字母表開頭。於是,w會被替換為x,x會被替換為a。
 1>開啟記事本,寫如下一段程式碼:
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;
    }
}
儲存為Encryption.java【同上節,我還是把他放在了D盤下InputTest資料夾內】 


2>開啟記事本,寫如下一段程式碼:
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;
    }
}
儲存為Decryption.java【同上節,我還是把他放在了D盤下InputTest資料夾內】   3>開啟記事本,寫如下一段程式碼: 
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("操作失誤");
        }
    }
}
儲存為 Switcher.java【同上節,我還是把他放在了D盤下InputTest資料夾內】 
開啟dos執行視窗,輸入d:轉到D盤,接下來輸入cd InputTest轉到InputTest目錄下:
輸入Javac Switcher.java 回車 java Switcher。

我們加密:admin和解密:admin;結果如下圖