题目要求是这样的,输入明文,输入密钥,用Vigenere加密算法进行加密,得到密文。然后通过明文和密文,再次反推出密钥。
基本上没有什么难点。就是反推密钥时,得到的有重复的密钥串,于是用了穷举法,对每种长度的密钥串子串进行测试,通过明文能够完全匹配出密文的,并且是第一次出现的,就取那个子串作为反推的密钥。
还有个问题没花时间解决,就是目前还不能处理输入的明文带空格的情况。
代码如下:
import java.util.Scanner;
public class Vigenere {
static char[] wordTable = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z' };
public static void main(String[] args) {
char[][] vigenereTable = creatVigenereTable();
Scanner sin = new Scanner(System.in);
System.out.println("请输入你想进行加密的明文:");
String mingwenStr = sin.nextLine();
char[] mingwen = mingwenStr.toCharArray();
System.out.println("请设置一个密钥:");
String miyaoStr = sin.nextLine();
char[] miya