图片加密 解密

根据网上代码Copy  用异或 做一个图片加密解密的功能 

发现当服务器重启   前端通过第一次上传多个图片 会出现问题   猜测由于ajax请求  时间过短

参考:https://www.cnblogs.com/fx2008/p/5681930.html 

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileEncAndDec {
    private static final int numOfEncAndDec = 0x99; //加密解密秘钥
    private static int dataOfFile = 0; //文件字节内容
    public static void main(String[] args) {

        File srcFile = new File("桌面.jpg"); //初始文件
        File encFile = new File("encFile.tif"); //加密文件
        File decFile = new File("decFile.bmp"); //解密文件
        
        try {
            EncFile(srcFile, encFile); //加密操作
        } catch (Exception e) {
            e.printStackTrace();
        }  
    }

    private static void EncFile(File srcFile, File encFile) throws Exception {
        if(!srcFile.exists()){
            System.out.println("source file not exixt");
            return;
        }
        
        if(!encFile.exists()){
            System.out.println("encrypt file created");
            encFile.createNewFile();
        }
        InputStream fis  = new FileInputStream(srcFile);
        OutputStream fos = new FileOutputStream(encFile);
        
        while ((dataOfFile = fis.read()) > -1) {
            fos.write(dataOfFile^numOfEncAndDec);
        }
        
        fis.close();
        fos.flush();
        fos.close();
    }
}

改进(和上面传参不一样)(主要是10-21行):

 1 private static boolean EncodeFileNew(InputStream inputStream, File encFile) {
 2         try {
 3             if (!encFile.exists()) {
 4                 LOGNew.error("加密文件创建成功!");
 5                 encFile.createNewFile();
 6             }
 7             InputStream fis = inputStream;
 8             OutputStream fos = new FileOutputStream(encFile);
 9 
10             byte[] buffer = new byte[1024];
11             int len = 0;
12             while ((len = fis.read(buffer)) != -1) {
13                 byte[] outputBuffer = new byte[len];
14                 // 分别对每个字节进行异或操作
15                 for (int i = 0; i < len; i++) {
16                     byte b = buffer[i];
17                     b = (byte) (b ^ numOfEncAndDecNew);
18                     outputBuffer[i] = b;
19                 }
20                 fos.write(outputBuffer, 0, len);
21             }
22 
23             fis.close();
24             fos.flush();
25             fos.close();
26             return true;
27         } catch (Exception e) {
28             LOGNew.error(e.getMessage(), e);
29             return false;
30         }
31 
32     }
posted @ 2020-01-07 09:39  一个二愣子  阅读(915)  评论(0)    收藏  举报