Bootstrap

JavaIO流实现图片加密解密

 本篇博客是关于直接复制图片,加密复制图片和解密被加密的图片。

一、直接复制图片

这个话不多说直接上代码:

package chapter10;

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

public class PictureCopy {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            fis = new FileInputStream("D:\\picture.jpg");
            fos = new FileOutputStream("D:\\picture3.jpg");
            byte[] buffer = new byte[20];
            int len;
            while((len = fis.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
        finally {
            if(fos!=null){
                try{
                    fos.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try{
                    fis.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 

这个是直接运行就会复制原来图片(可以直接查看,没有被加密)。

二、加密复制图片

接下来这个代码是属于加密复制代码,也就是说不能够直接查看,即使去本地查看也不行。

package chapter10;

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


public class PictureCopyEncryption {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            fis = new FileInputStream("D:\\picture.jpg");
            fos = new FileOutputStream("D:\\picture3.jpg");
            byte[] buffer = new byte[20];
            int len;
            while((len = fis.read(buffer))!=-1){
                for(int i=0;i<len;i++){
                    buffer[i] = (byte)(buffer[i]^5);
                }
                fos.write(buffer,0,len);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
        finally {
            if(fos!=null){
                try{
                    fos.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try{
                    fis.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 说明:假如m = 10 ,n = 5,那么m ^ n ^ n = m,所以此时我们想对加密图片进行解密,只需要将刚刚加密的图片再 ^ 5 即可解密图片,解释:原图片 ^ 5 ^ 5 = 原图片(其中 原图片 ^ 5=加密图片)

三、将加密图片进行解密

接下来这个代码是将上面加密那个图片进行解密,然后就可以查看解密后的图片了:

package chapter10;

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

public class PictureCopyDecode {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            File encryption = new File("D:\\picture1.jpg");
            File decode = new File("D:\\picture2.jpg");
            fis = new FileInputStream(encryption);
            fos = new FileOutputStream(decode);
            byte[] buffer = new byte[20];
            int len;
            while((len = fis.read(buffer))!=-1){
                for(int i=0;i<len;i++){
                    buffer[i] = (byte)(buffer[i]^5);
                }
                fos.write(buffer,0,len);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
        finally {
            if(fos!=null){
                try{
                    fos.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try{
                    fis.close();
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 

;