維吉尼亞密碼 java

借用了map 來完成 不使用阿斯克碼


package demo3;

import java.util.HashMap;
import java.util.Scanner;

public class demo3 {
	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();

		map.put("a", "0");		map.put("A", "26");		map.put("b", "1");		map.put("B", "27");		map.put("c", "2");
		map.put("C", "28");		map.put("d", "3");		map.put("D", "29");		map.put("e", "4");		map.put("E", "30");
		map.put("f", "5");		map.put("F", "31");		map.put("g", "6");		map.put("G", "32");		map.put("h", "7");
		map.put("H", "33");		map.put("i", "8");		map.put("I", "34");		map.put("j", "9");		map.put("J", "35");
		map.put("k", "10");		map.put("K", "36");		map.put("l", "11");		map.put("L", "37");		map.put("m", "12");
		map.put("M", "38");		map.put("n", "13");		map.put("N", "39");		map.put("o", "14");		map.put("O", "40");
		map.put("p", "15");		map.put("P", "41");		map.put("q", "16");		map.put("Q", "42");		map.put("r", "17");
		map.put("R", "43");		map.put("s", "18");		map.put("S", "44");		map.put("t", "19");		map.put("T", "45");
		map.put("u", "20");		map.put("U", "46");		map.put("v", "21");		map.put("V", "47");		map.put("w", "22");
		map.put("W", "48");		map.put("x", "23");		map.put("X", "49");		map.put("y", "24");		map.put("Y", "50");
		map.put("z", "25");		map.put("Z", "51");		map.put("0", "a");		map.put("1", "b");		map.put("2", "c");
		map.put("3", "d");		map.put("4", "e");		map.put("5", "f");		map.put("6", "g");		map.put("7", "h");
		map.put("8", "i");		map.put("9", "j");		map.put("10", "k");		map.put("11", "l");		map.put("12", "m");
		map.put("13", "n");		map.put("14", "o");		map.put("15", "p");		map.put("16", "q");		map.put("17", "r");
		map.put("18", "s");		map.put("19", "t");		map.put("20", "u");		map.put("21", "v");		map.put("22", "w");
		map.put("23", "x");		map.put("24", "y");		map.put("25", "z");		map.put("26", "A");		map.put("27", "B");
		map.put("28", "C");		map.put("29", "D");		map.put("30", "E");		map.put("31", "F");		map.put("32", "G");
		map.put("33", "H");		map.put("34", "I");		map.put("35", "J");		map.put("36", "K");		map.put("37", "L");
		map.put("38", "M");		map.put("39", "N");		map.put("40", "O");		map.put("41", "P");		map.put("42", "Q");
		map.put("43", "R");		map.put("44", "S");		map.put("45", "T");		map.put("46", "U");		map.put("47", "V");
		map.put("48", "W");		map.put("49", "X");		map.put("50", "Y");		map.put("51", "Z");		
		System.out.println("請輸入字符串:");

		Scanner sc = new Scanner(System.in);// 鍵盤輸入

		String mingwen = sc.nextLine();
		char[] mingwen1 = mingwen.toCharArray();

		boolean asd = true;// asd用來表示是否包含其他不規範字符
		 
		 asd=match(mingwen);
	
		if (asd == false) {
			System.out.println("輸入類型錯誤");
		} else {

			Scanner sc1 = new Scanner(System.in);
			System.out.println("請輸入密鑰:(密鑰爲小寫的連續的字母)");

			String my1 = sc1.nextLine();
			char[] my2 = my1.toCharArray();// 把字符串拆分爲字符到數組
			boolean asd1 = true;
			asd1=match2(my1);
	
		if (asd1 == false) {
			System.out.println("輸入類型錯誤");
		}else{
			while (true) {
				// 主頁面
				System.out.println("```!!!加密and解密!!!```");
				System.out.println("1、加密選項");
				System.out.println("2、解密選項");
				System.out.println("3、加密且解密,我也不知道你想幹啥");
				System.out.println("4、退出");
				System.out.println("請做出你的選擇:(請輸入數字1、2、3、4且4爲退出)");

				Scanner sc2 = new Scanner(System.in);

				int choice = sc2.nextInt();

				switch (choice) {
				case 1:// 加密

					jiamidemo(mingwen1, map, my2);

					break;
				case 2:// 解密

					jiemidemo(mingwen1, map, my2);

					break;
				case 3:

					char[] arr = jiamidemo(mingwen1, map, my2);

					jiemidemo(arr, map, my2);
					break;
				case 4:// 退出
				default:
					System.out.println("謝謝你的使用,有緣再見");
					System.exit(0);
					break;

				}
			}
		   
		 }

	 }
 }

	

	private static char[] jiamidemo(char[] mingwen1,
			HashMap<String, String> map, char[] my2) {// 加密方法
		// TODO Auto-generated method stub

		char[] arr = new char[mingwen1.length];// 創建數組來裝密文
		int ii = 0;
		for (int i = 0; i < mingwen1.length; i++) {
			if ((mingwen1[i]) == ' ') {

				arr[i] = ' '; // 空格填充

			} else {

				String s2 = String.valueOf(mingwen1[i]);
				int mw = Integer.parseInt(map.get(s2));// 強轉爲int

				String s3 = String.valueOf(my2[ii % (my2.length)]);
				int my = Integer.parseInt(map.get(s3));// 強轉爲int
				int demo1=0;
				if(mw>25){
					 demo1 =(mw + my) % 26+26;
				
				}else{
				 demo1 = (mw + my) % 26;
				}
				String s = String.valueOf(demo1);
				char a1 = (map.get(s)).charAt(0);// 把拿到的字符轉化爲char類型
				arr[i] = a1;// 經過循環把密文依次放進數組中
				ii++;
			}

		}
		System.out.print("加密後密文是:");
		System.out.println(arr);
		return arr;
	}

	private static void jiemidemo(char[] mingwen1, HashMap<String, String> map,
			char[] my2) {// 解密方法
		// TODO Auto-generated method stub
		char[] arr = new char[mingwen1.length];// 創建數組來裝密文
		int ii = 0;
		for (int i = 0; i < mingwen1.length; i++) {
			if ((mingwen1[i]) == ' ') {

				arr[i] = ' '; // 空格填充

			} else {

				String s2 = String.valueOf(mingwen1[i]);
				int mw = Integer.parseInt(map.get(s2));// 強轉爲int

				String s3 = String.valueOf(my2[ii % (my2.length)]);
				int my = Integer.parseInt(map.get(s3));// 強轉爲int
				int demo1=0;
				if(mw>25){
					demo1 = (mw - my + 26) % 26+26;
				}else{
				 demo1 = (mw - my + 26) % 26;
				}
				ii++;
				String s = String.valueOf(demo1);
				char a1 = (map.get(s)).charAt(0);// 把拿到的字符轉化爲char類型
				arr[i] = a1;// 經過循環把密文依次放進數組中

			}
		}
		System.out.print("解密後明文是:");
		System.out.println(arr);
	}
	public static boolean match(String str) {//正則表達式 校驗字符串
		  String regex = "^[a-zA-Z\\s]+$";		  
		  return str.matches(regex);
		 }
	private static boolean match2(String my1) {//校驗密鑰
		// TODO Auto-generated method stub
		String regex = "^[a-z]+$";		  
		  return my1.matches(regex);
		
	}
}

來自17網工楊森

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章