📄 vigenere.java
字号:
import java.util.*;
import java.io.*;
/**
*
* @author Neng
*
*/
public class Vigenere {
/**
* input file containing plaintext
*/
private File inFile;
/**
* ArrayList of plaintext, key and cipher
*/
ArrayList ap, ak, ac;
char[] key;
public Vigenere() {
ap = new ArrayList();
ak = new ArrayList();
ac = new ArrayList();
}
public void encrypt(File in, String keyStr) throws IOException {
inFile = in;
System.out.println("Key is "+keyStr);
key = keyStr.toUpperCase().toCharArray();
ap.clear();
ak.clear();
ac.clear();
FileReader fr = new FileReader(inFile);
FileWriter fw = new FileWriter(inFile.getParent()
+ "/Vigenere_cipher.txt");
StringBuffer sb = new StringBuffer();
// read plaintext from input file and change to uppercase
int temp;
while ((temp = fr.read()) != -1) {
if ((temp >= 65 && temp <= 90) || (temp >= 97 && temp <= 122))
sb.append((char) temp);
}
fr.close();
String plainStr = sb.toString().toUpperCase();
//plaintext array
for (int i = 0; i < plainStr.length(); i++) {
ap.add(plainStr.charAt(i));
}
//generate key array
for (int i = 0; i < ap.size(); i++) {
ak.add(i, key[i % key.length]);
}
//encryption
for (int i = 0; i < ak.size(); i++) {
int c;
c = (((Character) ap.get(i)).charValue()
+ ((Character) ak.get(i)).charValue() - 2 * 65) % 26 + 65;
ac.add(i, (char) c);
}
for (int i = 0; i < ac.size(); i++) {
fw.write(((Character) ac.get(i)).charValue());
}
fw.close();
System.out.println("Vigenere encryption ok");
}
public void decrypt() throws IOException {
ap.clear();
ak.clear();
ac.clear();
FileReader fr = new FileReader(inFile.getParent()
+ "/Vigenere_cipher.txt");
FileWriter fw = new FileWriter(inFile.getParent()
+ "/Vigenere_decrypt.txt");
StringBuffer sb = new StringBuffer();
int temp;
while ((temp = fr.read()) != -1) {
if ((temp >= 65 && temp <= 90) || (temp >= 97 && temp <= 122))
sb.append((char) temp);
}
fr.close();
String plainStr = sb.toString().toUpperCase();
for (int i = 0; i < plainStr.length(); i++) {
ap.add(plainStr.charAt(i));
}
for (int i = 0; i < ap.size(); i++) {
ak.add(i, key[i % key.length]);
}
for (int i = 0; i < ak.size(); i++) {
int c;
c = (((Character) ap.get(i)).charValue()
- ((Character) ak.get(i)).charValue() + 26) % 26 + 97;
ac.add(i, (char) c);
}
for (int i = 0; i < ac.size(); i++) {
fw.write(((Character) ac.get(i)).charValue());
}
fw.close();
System.out.println("Vigenere decryption ok");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -