⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vigenere.java

📁 Java实现传统算法加密解密
💻 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 + -