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

 

(待后续知识改进)

Python 字符串格式化 (%操作符)

自适应辛普森公式辛普森公式是数值方法中常用的计算函数定积分的近似方法 计算定积分的方法 辛普森公式的推导 其他N-C公式 自适应方法 计算定积分的方法 求原函数 直接查表 这个求不出来怎么办∫x0t...
  • ghode_dave
  • ghode_dave
  • 2017年12月28日 16:18
  • 17

Java基础知识总结-补充

出自:http://blog.csdn.net/huxiaoyonglan1/article/details/50242113 Java基础知识总结-补充 写代码: ...
  • lzhat
  • lzhat
  • 2017年02月11日 16:09
  • 531

异方差性以及加权最小二乘优化

异方差性(heteroscedasticity )是相对于同方差而言的。所谓同方差,是为了保证回归参数估计量具有良好的统计性质,经典线性回归模型的一个重要假定:总体回归函数中的随机误差项满足同方差性,...
  • u010381985
  • u010381985
  • 2017年03月01日 09:00
  • 2014

关于异或的一些东西和应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结...
  • rockpk008
  • rockpk008
  • 2015年11月22日 23:22
  • 1002

异或运算实现两个数的交换

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp.采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的...
  • qq_34908844
  • qq_34908844
  • 2017年12月24日 20:28
  • 133

java的初识及入门

java的基本特点 最重要的还是 跨平台性 JDK:开发者使用的工具包 JRE:程序运行的环境 JVM:java的虚拟机 三者关系是包含关系(JDK(JRE(JVM)))注意:你编写的代...
  • qq_34936541
  • qq_34936541
  • 2017年11月27日 20:09
  • 182

异或应用小总结

这里只总结我做过的几道异或的题,所以肯定不全面,日后再添加啦。 1.交换 交换a和b的简单写法 {CSDN:CODE:1862687}...
  • hulamua
  • hulamua
  • 2016年09月02日 10:14
  • 729

科目二上车前的基础说明

从科目一到科目中间大概有一个半月时间
  • lilinoscar
  • lilinoscar
  • 2014年11月11日 14:38
  • 8239

Java: byte short 如何正确异或!

例子: // 1 byte[] bytes = { (byte) 0xf1, (byte) 0xf2, (byte) 0xf3, (byte) 0xf4, (byte) 0xf5, (byte)...
  • ouyangtianhan
  • ouyangtianhan
  • 2015年11月30日 19:08
  • 2841

异或运算的神奇运用

转自:http://www.physixfan.com/archives/563/Xor运算是位运算的一种,和And、Or运算类似,假如a、b都是布尔变量,则a Xor b被定义为:a、b相异则为真(...
  • Dustin_CDS
  • Dustin_CDS
  • 2016年03月05日 13:05
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础05(补充二)-异或的应用
举报原因:
原因补充:

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