Java基础05(补充二)-异或的应用

原创 2012年03月28日 21:20:45

1.异或的性质:

    一个数,异或其他的数两次后,还是其本身!

 

2.应用:简单的文件加密程序

   代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;

class Encrypt {
		private static final int PASSWORD = 0x12345678;
		private static final String SUFFIX = ".enc";
		
		public void doEncrypt(String path) {
			FileInputStream fis = null;
			FileOutputStream fos = null;
			
			try {					
				File file = new File(path);
				File newFile = new File(path+SUFFIX);
				fis = new FileInputStream(file); //FileNotFoundException
				fos = new FileOutputStream(newFile); //FileNotFoundException
				byte [] buf = new byte[1024];
				int len = 0;
				while((len=fis.read(buf))!=-1) { //IOException
					for(int i = 0;i<len;i++)
					{
						buf[i]=(byte)(buf[i]^PASSWORD); 
					}
					fos.write(buf,0,len); //IOException
				}
			}
			catch(FileNotFoundException e) {
				throw new RuntimeException("文件不存在,请重试!");
			}	
			catch(IOException e) {
				throw new RuntimeException("文件读取异常!");
			}
			finally {
				try {
					if(fis!=null)
						fis.close();
				}catch(Exception e ) {
					throw new RuntimeException("文件读取流异常!");
				}	
				
				try {
					if(fos!=null)
						fos.close();
				}catch(Exception e) {
					throw new RuntimeException("文件存储流异常!");
				}	
			}
		}
		
		public void doDecrypt(String path) {
			int index = path.lastIndexOf(SUFFIX);
			if(index!=(path.length()-SUFFIX.length())) {
				System.out.println("文件类型不正确!请重试!");
				return;	
			}
				
			FileInputStream fis = null;
			FileOutputStream fos = null;
			
			try {					
				File file = new File(path);
				File newFile = new File(path.substring(0,index));
				fis = new FileInputStream(file); //FileNotFoundException
				fos = new FileOutputStream(newFile); //FileNotFoundException
				byte [] buf = new byte[1024];
				int len = 0;
				while((len=fis.read(buf))!=-1) { //IOException
					for(int i = 0;i<len;i++)
					{
						buf[i]=(byte)(buf[i]^PASSWORD); 
					}
					fos.write(buf,0,len); //IOException
				}
			}
			catch(FileNotFoundException e) {
				throw new RuntimeException("文件不存在,请重试!");
			}	
			catch(IOException e) {
				throw new RuntimeException("文件读取异常!");
			}
			finally {
				try {
					if(fis!=null)
						fis.close();
				}catch(Exception e ) {
					throw new RuntimeException("文件读取流异常!");
				}	
				
				try {
					if(fos!=null)
						fos.close();
				}catch(Exception e) {
					throw new RuntimeException("文件存储流异常!");
				}	
			}
		}
		
		public static void main(String [] args) {
			Encrypt e = new Encrypt();
			if(args.length != 2) {
				System.out.println("参数输入错误!请重新输入!");
				return;
			}
			
			if(args[0].equalsIgnoreCase("encrypt"))
				e.doEncrypt(args[1]);
			else if(args[0].toUpperCase().equals("DECRYPT")) {
				e.doDecrypt(args[1]);
			}
				
		}
	}


测试方法:

javac Encrypt.java

java Encrypt d:\1.txt encrypt

 

(待后续知识改进)

相关文章推荐

Java学习-异或应用

异或应用package basis.day02; /** * 异或的重要用途:转换m,n的值 * @author LENOVO * */ public class TestXor { p...

Java多线程系列--“基础篇”05之 线程等待与唤醒

概要本章,会对线程等待/唤醒方法进行介绍。1. wait(), notify(), notifyAll()等方法介绍  在Object.java中,定义了wait(), notify()和notify...

05_java基础加强(数组、判断语句、循环结构、进制转换、常用类等)

------- android培训、java培训、期待与您交流! ---------- 一、什么是变量 定义在方法中的变量、定义在方法参数中的变量,定义在for循环中的变量都是“局部变量”,只能在有...

[java基础学习]05——方法和数组

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.方法     1)概念:         就是完成特定功能的代码块。     2)格式   ...
  • lqg5522
  • lqg5522
  • 2015年04月27日 21:58
  • 143

java基础知识05

1.包 package          (包名的所有字母小写)     1.对类文件进行分类管理     2.给类提供多层命名空间     3.写在程序文件的第一行     4.类名的全称是...

Java基础05 - 面向对象2(成员变量与局部变量)

1 成员变量1.1 成员变量的分类 (1) 类变量(以static修饰) - 生命周期:从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与类的生存范围相同。 - 访问方式:...

Java基础05-循环问题,数组

补充1.变量的作用域 - 从变量的声明开始,到离该变量最近的大括号结束 2.变量的重名问题 - 作用域重叠时,变量名不能相同嵌套循环 循环中套循环,多行多列时使用,外层控制行,内层控制列...
  • Lh_0618
  • Lh_0618
  • 2016年03月11日 23:13
  • 253

黑马程序员-java基础05

一、static静态关键字 1.static关键字:用于修饰成员(成员变量和成员函数) 2.被修饰后的成员具备以下特点: (1)随着类的加载而加载,随的类的消失而消失 (2)优先于对象存在 ...

黑马程序员--Java基础--05内部类及异常

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 内部类 内部类是定义在另一个类中的类,为什么使用内部类: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础05(补充二)-异或的应用
举报原因:
原因补充:

(最多只允许输入30个字)