基于Java实现的记事本加解密

(1)实现读取一个记事本文件a.txt,把里面的字符编码加1实现简单加密并输出到另一个记事本b.txt中;用同样的原理把b.txt解密到c.txt;
(2)实现读取一个记事本文件,把里面的字符与一个随机数异或后输出到另一个记事本中;同样原理实现解密。
加密部分:

package internetsafe;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class JiaMi1 {       
	
	public static void main(String[] args) {
		  
		  BufferedReader fr = null;     //读取类
		  BufferedWriter fw = null;     //写入类
		  
		  try {
		   File f_Source=new File("D:\\a.txt");   //原始文件
		   fr=new BufferedReader(new FileReader(f_Source));//读取文本
		   File f_Target=new File("D:\\b.txt");//目标文件
		   
		   fw=new BufferedWriter(new FileWriter(f_Target));//将文本写入
		   String s="";//定义一个临时变量,临时存储每行的文本
		   while((s=fr.readLine())!=null){//读取文件中的每一行并存入临时变量s,直到文件末尾.
		        s=s.trim();//去掉每行前后的空格
		        String str="";//定义一个临时变量,准备写入的一行文本
		    for(int i=0;i<s.length();i++)
		        { //遍历这一行文本的每个字符
		        char ch=s.charAt(i);//把这一行文本的中一个字符赋给一个字符变量
		    	java.util.Random r=new java.util.Random(s.length());
                
		    	for(int j=0;j<s.length();j++){
		    		System.out.println(r.nextInt());
		    		}
		     if(Character.isLetter(ch))
		    {   //如果这个字符是字母
		      if(Character.isUpperCase(ch))
		        { //如果这个字符是大写字母
		       if(ch-'A'+1>25)
		         { //如果这个字符向后移1个字符大于Z
		        ch=(char) ('A'+(ch-'A'+1)%26);
		        //这个字符从A向后移相应的字符
		         }
		       else{//如果这个字符向后移1个字符不大于Z
		        ch=(char) (ch+1);//这个字符向后移1个字符
		           }
		        }
		      if(Character.isLowerCase(ch))
		      {//如果这个字符是小写字母
		       if(ch-'a'+1>25)
		        {//如果这个字符向后移1个字符大于z
		        ch=(char) ('a'+(ch-'a'+1)%26);//这个字符从a向后移相应的字符
		        }
		       else
		       {//如果这个字符向后移1个字符不大于z
		        ch=(char) (ch+1);//这个字符向后移1个字符
		       }
		      }
		    }
		     str=str+ch;//把每个加密或没加密的字符重新拼装成一行字符串
		      }
		    fw.write(str);//把这一行字符串写入目标文件
		    fw.newLine();//目标文件写入换行符
		      }
		     }
		  catch (Exception e) 
		  {//捕获异常
		   e.printStackTrace();//输出异常信息
		  } 
		  finally{
		   try {
		    fw.close();//关闭写入缓冲流
		    fr.close();//关闭读取缓冲流
		   } 
		   catch (Exception e)
		   {//捕获异常
		    e.printStackTrace();//输出异常信息
		   }
		  }
		  System.out.println("加密结束!");
		 }
	
}
package internetsafe;


import java.io.*;
import java.util.*;
class JiaMi2
{
   public static void main(String[] args)  throws Exception
   {
      //找到要加密的文件,盘符自己指定,输入输出不需要在同一个盘符
      File  inFile = new File("d:\\a.txt");
      //将要加密的文件输出到指定的盘符
      File outFile = new File("d:\\b.txt");

     //建立数据通道,让图片的二进制数据流入
     FileInputStream input = new FileInputStream(inFile);
     FileOutputStream output = new FileOutputStream(outFile);

     //产生加密异或的另一个数字
     Random random = new Random();
     int num = random.nextInt(5);//表示产生0-10之间的随机数,产生的这个随机数我们应该可以保存,供加密和解密者使用
     System.out.println("随机数为:"+num);

     //在读的过程中,将读到的数据异或一个数字,这个数字应该是由某种加密算法生成的,在这里我仅仅简单的编一个数字928(我的生日),然后进行异或,将得到的数据输出
     int content = 0 ;//该变量用于存储读取到的数据,当然这里可以使用long等更长的数据类型,当然我们也可以使用其他的数据类型,只需要满足^两端的数据类型能够相互转换就行,至少能进行强制类型转换
     while((content=input.read())!=-1) // 如果没有到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了,-1为文件的结束符
     {
        output.write(content^num);  //写到输出文件流中
     }

     //关闭资源
    input.close();
    output.close();
   }
}

解密部分:

package internetsafe;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class JieMi1 {       
	
	public static void main(String[] args) {
		  
		  BufferedReader fr = null;     //读取类
		  BufferedWriter fw = null;     //写入类
		  
		  try {
		   File f_Source=new File("D:\\b.txt");   //原始文件
		   fr=new BufferedReader(new FileReader(f_Source));//读取文本
		   File f_Target=new File("D:\\c.txt");//目标文件
		   
		   fw=new BufferedWriter(new FileWriter(f_Target));//将文本写入
		   String s="";//定义一个临时变量,临时存储每行的文本
		   while((s=fr.readLine())!=null){//读取文件中的每一行并存入临时变量s,直到文件末尾.
		        s=s.trim();//去掉每行前后的空格
		        String str="";//定义一个临时变量,准备写入的一行文本
		    for(int i=0;i<s.length();i++)
		        { //遍历这一行文本的每个字符
		        char ch=s.charAt(i);//把这一行文本的中一个字符赋给一个字符变量
		     if(Character.isLetter(ch))
		    {   //如果这个字符是字母
		      if(Character.isUpperCase(ch))
		        { //如果这个字符是大写字母
		       if(ch-'A'-1<0)
		         { //如果这个字符向前移1个字符小于A
		        ch=(char) ('Z');
		        //这个字符从A向前移相应的字符
		         }
		       else{//如果这个字符向前移1个字符大于A
		        ch=(char) (ch-1);//这个字符向前移1个字符
		           }
		        }
		      if(Character.isLowerCase(ch))
		      {//如果这个字符是小写字母
		       if(ch-'a'-1<0)
		        {//如果这个字符向前移1个字符大于z
		        ch=(char) ('a');//这个字符从a向后移相应的字符
		        }
		       else
		       {//如果这个字符向后移1个字符不大于z
		        ch=(char) (ch-1);//这个字符向后移1个字符
		       }
		      }
		    }
		     str=str+ch;//把每个加密或没加密的字符重新拼装成一行字符串
		      }
		    fw.write(str);//把这一行字符串写入目标文件
		    fw.newLine();//目标文件写入换行符
		      }
		     } 
		  catch (Exception e) 
		  {//捕获异常
		   e.printStackTrace();//输出异常信息
		  } 
		  finally{
		   try {
		    fw.close();//关闭写入缓冲流
		    fr.close();//关闭读取缓冲流
		   } 
		   catch (Exception e)
		   {//捕获异常
		    e.printStackTrace();//输出异常信息
		   }
		  }
		  System.out.println("解密结束!");
		 }
	
}

package internetsafe;

import java.io.*;
class JieMi2
{
   public static void main(String[] args)  throws Exception
   {
      //找到要加密的文件,盘符自己指定,输入输出不需要在同一个盘符
      File  inFile = new File("d:\\a.txt");
      //将要加密的文件输出到指定的盘符
      File outFile = new File("d:\\b.txt");

     //建立数据通道,让图片的二进制数据流入
     FileInputStream input = new FileInputStream(inFile);
     FileOutputStream output = new FileOutputStream(outFile);

     //在读的过程中,将读到的数据异或一个数字,这个数字应该是由某种加密算法生成的,
     int content = 0 ;//该变量用于存储读取到的数据,当然这里可以使用long等更长的数据类型,当然我们也可以使用其他的数据类型,只需要满足^两端的数据类型能够相互转换就行,至少能进行强制类型转换
     while((content=input.read())!=-1) // 如果没有到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了,-1为文件的结束符
     {
        output.write(content^4);  //写到输出文件流中
     }

     //关闭资源
    input.close();
    output.close();
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值