简单文件加密/解密

这个文件加密方法是采用异或方式对文中每个字节进行异或加密,逻辑非常简单:



文件加密代码实现:

[java]  view plain  copy
  1. </pre><pre name="code" class="java">package ********//<span style="color:#33cc00;">自己定义</span>;  
  2.   
  3. import java.io.File;  
  4. import java.io.RandomAccessFile;  
  5. import java.util.Scanner;  
  6.   
  7. public class Test1 {  
  8.     public static void main(String[] args) {  
  9.         System.out.println("输入文件路径:");  
  10.         String  s = new Scanner(System.in).nextLine();  
  11.         File f =new File(s);  
  12.         if(!f.isFile()){  
  13.             System.out.println("请输入正确的文件路径");  
  14.             return ;  
  15.               
  16.         }  
  17.         System.out.println("KEY:");  
  18.         int key =new Scanner(System.in).nextInt();  
  19.         try {  
  20.             encrypt(f,key);  
  21.             System.out.println("加密/解密完成");  
  22.         } catch (Exception e) {  
  23.             System.out.println("加密/解密失败");  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27.   
  28.     private static void encrypt(File f, int key) throws Exception{  
  29.         /*  
  30.          * 1.新建RandomAccessFile 对象赋给raf  
  31.          * 2.单字节循环读取,读取的字节值赋给b  
  32.          *      3.b异或key,结果在赋给b  
  33.          *      4.定位下标回到前一位置seek(raf.getFilePointer()-1)  
  34.          *      5.将字节值b 写回到的文件  
  35.          * 6.关闭raf  
[java]  view plain  copy
  1. <span style="white-space:pre">        </span> * 采用单字节访问比较慢,这里采用字节数组形式  
  2.          */  
  3.           
  4.         RandomAccessFile raf =new RandomAccessFile(f, "rw");  
  5.         //单字节访问  
  6.         /*int b ; 
  7.         while((b=raf.read())!=-1){ 
  8.             b=b^key; 
  9.             raf.seek(raf.getFilePointer()-1);; 
  10.             raf.write(b); 
  11.         }*/  
  12.         //字节数组访问  
  13.         //1024 2048 4096 8192  
  14.         byte[] buff =new byte[8192];  
  15.         int n;//保存每一批的数量  
  16.         while((n=raf.read(buff))!=-1){  
  17.             for(int i=0;i<n;i++){  
  18.                 buff[i] ^= key;  
  19.             }  
  20.             raf.seek(raf.getFilePointer()-n);  
  21.             raf.write(buff, 0, n);  
  22.         }  
  23.           
  24.         raf.close();  
  25.     }  
  26. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值