zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    myeclipse 代码提示(alt+/)
    彻底解决mysql中文乱码
    Pycharm取消默认的右击运行unittest方法
    解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.
    language support图标在哪里?怎么消失了?
    Ubuntu安装谷歌输入法或者搜狗
    最大流算法-ISAP
    WC2013-糖果公园
    bzoj4032-最短不公共子串
    bzoj1031-字符加密
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256593.html
Copyright © 2011-2022 走看看