本次实验①从键盘上接收文件路径输入和密钥,然后在硬盘上读取txt文件内容进行维吉尼亚加密后输出密文(鼓励但不强制要求将密文写入文件)。②从键盘上输入密钥和密文,给出解密后的明文(鼓励但不强制要求将密文写入文件)。至少实现下列三个函数:
//生成加密/解密的密码表
private static char[][] GenerateTable(int count)
//根据密文text和密钥key解密出明文
public static String Decode(String text,String key)
//根据明文的文件路径filePath和密钥key加密出密文
public static String Encode(String filePath, String key)
加密过程:(密钥使用RELATIONS)
package SHIYAN2;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;
public class Syan2 {
private static char[][] GenerateTable(int count){
char n='A';
char[][] TABLE=new char[26][26];
for(int i=0;i<26;i++) {!](https://img-
for(int j=0;j<26;j++) {
TABLE[i][j]=(char)(65+(j+i)%26);
}
}
return TABLE;
}
private static String txt2String(String fil){
String result = "";
try{
BufferedReader br = new BufferedReader(new FileReader(fil));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result = result + "\n" +s;
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static String Encode(String filePath, String key) {
String f=txt2String(filePath);
int m=f.length()/key.length();
for(int i=0;i<m;i++) {
key+=key;
}
int cou=0;
String text ="";
char[][] t=GenerateTable(1);
for(int i=1;i<f.length();i++) {
for(int j=0;j<key.length();j++) {
int n=(int)f.charAt(i);
if((int)f.charAt(i)==32) {
//System.out.print(" ");
text+=" ";
break;
}
else {
int n1=(int)f.charAt(i)-65;
int d1=(int)key.charAt(cou)-65;
//System.out.print(t[d1][n1]);
text+=t[d1][n1];
}
cou+=1;
break;
}
}
return text;
}
public static void Decode(String text,String key) {
int cont = 0;
int len = key.length(); //len为加密关键字的长度
for(int i=0; i<text.length(); i++)
{
if((int)text.charAt(i)<'A' ||(int)text.charAt(i)>'Z')
{
System.out.print(text.charAt(i));
cont++;
}
else
{
int j = (i-cont) % len;
int n = key.charAt(j)-'A';
System.out.print((char)((text.charAt(i)-'A'+26-n)%26+'A'));
}
}
}
public static void main(String[] args) throws IOException {
System.out.println("please enter the path of the file:");
Scanner st=new Scanner(System.in);
String file=st.nextLine();
System.out.println("please enter the path of the KEY:");
String K=st.nextLine();
char[][] t=GenerateTable(1);
String f=txt2String(file);//D:\MO\\encode.txt RELATIONS
System.out.println("输出的密文为:");
String text=Encode(file,K);
System.out.print(text);
Encode(file,K);
System.out.print("\n");
System.out.println("要处理的密文为:"+"\n"+text);
System.out.print("上一条密文解密后为:"+"\n");
Decode(text,K);
}
}
实验结果输出: