维吉尼亚密码 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网工杨森

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值