您现在的位置是:首页>博客详情

java文件内容加解密

FreshMan2023年04月20日 14:531441

简介java文件内容加解密,通过异或,AES算法进行加解密

@PostMapping("/swlUploadArray")

    public BaseResponse<JSONObject> swlUploadArray(@ApiParam(value = "文件资源", required = true) @RequestParam MultipartFile file) throws IOException {

        BaseResponse<JSONObject> response = new BaseResponse<>();

        String originalFilename = file.getOriginalFilename();

        InputStream inputStream = file.getInputStream();

        byte[] b = new byte[8 * 1024];

        FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\迅雷下载\\" + originalFilename));

        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);


        //三、小数组循环io读取、循环加密

        while ((inputStream.read(b)) != -1) {

            for (int i = 0; i < b.length; i++) {

                bufferedOutputStream.write(b[i] ^ 32);

            }

        }

        //6.2用来刷新缓冲区,刷新后可以再次写出

        bufferedOutputStream.flush();

        inputStream.close();

        bufferedOutputStream.close();


        response.setCode(ReturnCodeConst.SUCCESS);

        response.setMessage("加密完成");

        return response;

    }


    @GetMapping("/swlDownloadArray")

    public void swlDownloadArray(HttpServletResponse response) throws IOException {

        File f2 = new File("D:\\迅雷下载\\问卷Excel导入模板.xlsx");

        boolean exists = f2.exists();

        FileInputStream inputStream = new FileInputStream(f2);

        byte[] b = new byte[8 * 1024];


        String filePath = "2.jpg";

        //6.1清除buffer缓存

        response.reset();

        response.setContentType("application/octet-stream;charset=UTF-8");

        //response.setHeader("Content-Disposition", "inline; filename="+ new String(filePath.getBytes("UTF-8"), "ISO-8859-1"));// 定义文件名

        //response.setHeader("Content-Disposition", "attachment; filename="+ new String(filePath.getBytes("UTF-8"), "ISO-8859-1"));// 定义文件名

        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(filePath, "UTF-8"));

        response.setHeader("Pragma", "no-cache");

        response.setHeader("Cache-Control", "no-cache");

        response.setHeader("Expires", " 0");

        ServletOutputStream outputStream = response.getOutputStream();

        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);

        long l = System.currentTimeMillis();

        logger.info(String.valueOf(System.currentTimeMillis()));

        int swl = 0;

        while ((inputStream.read(b)) != -1) {

            for (int i = 0; i < b.length; i++) {

                bufferedOutputStream.write(b[i] ^ 32);

            }

        }

        //6.2用来刷新缓冲区,刷新后可以再次写出

        bufferedOutputStream.flush();

        inputStream.close();

        bufferedOutputStream.close();

        logger.info(String.valueOf(System.currentTimeMillis()));

        logger.info(String.valueOf(System.currentTimeMillis() - l));

    }


    @PostMapping("/one")

    public void encrypt(@ApiParam(value = "文件资源") @RequestParam(required = false) MultipartFile file, String uat, String type, int k) throws Exception {

        String sKey = "abcdefijklmnopqr";

        byte[] raw = sKey.getBytes("utf-8");

        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);


        String originalFilename = file.getOriginalFilename();

        InputStream inputStream = file.getInputStream();

        FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\迅雷下载\\" + originalFilename));


        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);


        CipherInputStream cis = new CipherInputStream(inputStream, cipher);

        byte[] buffer = new byte[8 * 1024];

        int r;

        while ((r = cis.read(buffer)) > 0) {

            bufferedOutputStream.write(buffer, 0, r);

        }

        //6.2用来刷新缓冲区,刷新后可以再次写出

        bufferedOutputStream.flush();

        cis.close();

        inputStream.close();

        bufferedOutputStream.close();

    }


    @GetMapping("/two")

    public void decrypt(HttpServletResponse response) throws Exception {

        String filePath = "2.jpg";

        //6.1清除buffer缓存

        response.reset();

        response.setContentType("application/octet-stream;charset=UTF-8");

        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(filePath, "UTF-8"));

        response.setHeader("Pragma", "no-cache");

        response.setHeader("Cache-Control", "no-cache");

        response.setHeader("Expires", " 0");


        ServletOutputStream outputStream = response.getOutputStream();

        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);



        File f2 = new File("D:\\迅雷下载\\" + filePath);

        FileInputStream inputStream = new FileInputStream(f2);

        byte[] b = new byte[8 * 1024];



        String sKey = "abcdefijklmnopqr";

        byte[] raw = sKey.getBytes("utf-8");

        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");


        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

        cipher.init(Cipher.DECRYPT_MODE, skeySpec);

        CipherOutputStream cos = new CipherOutputStream(bufferedOutputStream, cipher);

        byte[] buffer = new byte[8 * 1024];

        int r;

        while ((r = inputStream.read(buffer)) >= 0) {

            System.out.println();

            cos.write(buffer, 0, r);

        }

        //6.2用来刷新缓冲区,刷新后可以再次写出

        cos.close();

        bufferedOutputStream.flush();

        inputStream.close();

        bufferedOutputStream.close();

    }