Java IO4 实现凯撒密码加密解密文本文件

凯撒加密原理就是以一个标准表的偏移量来加密,我们这里以ASCLL表为标准表,偏移量为1来实现"加密"。

CaesarWriter.java:

import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;
/**
 * 自定义的输出流:实现字符数据的凯撒密码加密过程
 * @author Administrator
 *
 */
public class CaesarWriter extends FilterWriter {
	protected CaesarWriter(Writer out) {
		
		super(out);
	}
	
	@Override
	public void write(int c) throws IOException {
		c++;
		super.write(c);
	}
	@Override
	public void write(String str) throws IOException {
		// TODO Auto-generated method stub
		//父类的写
//		super.write(str);
		char data[] = str.toCharArray();
		for(int i = 0; i < data.length; i++) {
			write(data[i]);//返回上面的write()函数,重载
		}
	}
}

CaesarReader.java:

import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;

/**
 * 自定义使用凯撒密码解密文本数据
 * 
 * @author hwyou
 *
 */
public class CaesarReader extends FilterReader {

	protected CaesarReader(Reader in) {
		super(in);
	}
	
	@Override
	public int read() throws IOException {

		int c = super.read();
		// 解码
		if (c != -1) {
			c--;
		}
		return c;
	}

}


TestCaesar.java:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestCaesar {

	public static void main(String[] args) {
		//加密
		encode();
		
		//解码
		decode();
	}

	private static void decode() {
		try(CaesarReader in = new CaesarReader(new FileReader("c.txt"))) {
			
			int c;
			while(-1 != (c = in.read())) {
				System.out.println((char)c);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	private static void encode() {
		String msg = "hello";
		//原始
		try(FileWriter out= new FileWriter("f.txt")) {
			out.write(msg);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//加密
		try(CaesarWriter out = new CaesarWriter(new FileWriter("c.txt"))) {
			out.write(msg);
		} catch (IOException e) {
			// TODO: handle exception
		}
	}
}

先注释decode(),生成f.txt和c.txt,然后反注释encode,根据c.txt打印hello。

原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256593.html