A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class  CopyFileClass
{
//字节流的方式不仅可以拷贝普通文件,还可以拷贝任意的二进制文件例如exe文件
public static void main(String[] args)  throws IOException
{
在主程序这里 用mian的参数 定义
就是实现 CopyFileClass  c:\1.txt true  //这样是对文件的加密
   CopyFileClass  c:\1.txt false  //这样是对文件的解密
如果读取文件的时候 发现是已经加密的文件 会给出提示
如果没有加密 那么就加密,
如果解密的时候发现文件没有加密 那么也会给出提示
  FileCopyBuffer(String name,String name2 ,String Boolean)
  
  
}
//字节流缓冲区高效拷贝
//我知道加密的时候应该是在写入数据的时候
//我想在这里实现一个对文件数据的加密
public static void FileCopyBuffer(String name,String name2 在这里定义一个参数如果true就是加密如果false就是解密) throws IOException
{
  BufferedInputStream fr= new BufferedInputStream(new FileInputStream(name));
  BufferedOutputStream fw= new BufferedOutputStream(new FileOutputStream(name2));
  int byte1=0;
  while((byte1=fr.read())!=-1)
  {
   fw.write(byte1);
  }
  fr.close();
  fw.close();

}



}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
给个建议!
你读取到了一个byte类型的数组,
然后可以知道byte类型的数组的值是从-128到127,假设我想加密,那么只要文件中字节顺序是错误的,就算是加密了。
在每次读取完一个byte类型数组后,将其中的某一个值给转换成另外一个值,例如把28->30,但注意,因为可能原来数组中本来就有30,所以,同时还要将30->28。
这样觉得就可以实现一次加密了。
解密方法也就是在读取的时候把调转了的值给转回来就OK了
回复 使用道具 举报
下面的是加密过程

import java.io.*;

class Test{
        public static void main(String[] args) throws Exception{
                File file = new File("1.jpg");
                FileInputStream in = new FileInputStream(file);
                FileOutputStream out = new FileOutputStream("2.jpg");
                byte[] b = new byte[1024];
                int ch;
                while((ch = in.read(b))!=-1){
                        for(int i = 0 ;i < ch ;i++){
                                if(b[i]==28){
                                        b[i]=30;
                                }
                                else if(b[i] == 30){
                                        b[i] = 28;
                                }
                        }
                        out.write(b);
                }
                in.close();
                out.close();
        }
}

再下面的是解密过程
import java.io.*;

class Break{
        public static void main(String[] args) throws Exception{
                File file = new File("2.jpg");
                FileInputStream in = new FileInputStream(file);
                FileOutputStream out = new FileOutputStream("3.jpg");
                byte[] b = new byte[1024];
                while(in.read(b)!=-1){
                        for(int i =0;i<b.length;i++){
                                if(b[i]==28){
                                        b[i]=30;
                                }
                                else if(b[i]==30){
                                        b[i] = 28;
                                }
                        }
                        out.write(b);
                }
                in.close();
                out.close();
        }
}

偷懒没有做异常处理了,我就是都抛出去了。不过这样做的确能达到目的。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王渠 发表于 2012-8-3 14:13
下面的是加密过程

import java.io.*;

谢了兄弟。我基本实现了过程。
通过对  写入文件的异或运算实现的。
用法是这样的 class 路径1 路径2 密室
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马