zoukankan      html  css  js  c++  java
  • java 对视频和图片进行加密解密

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.RandomAccessFile;

    public class FileEncryptAndDecrypt {

        public static void main(String[] args) throws Exception {

            String filename = "奔马.avi";

            String flag = readFileLastByte("c:\" + filename, 6);
            if (flag.indexOf("hello") > 0) {
                // 加密过了;
            } else {
                // 没有加密
                new FileEncryptAndDecrypt().encrypt("c:\" + filename, "hello");
            }
            System.out.println(new FileEncryptAndDecrypt().decrypt("c:\"
                    + filename, "c:\" + filename, 6));
            // System.out.println(readFileLastByte("c:\3.jpg", 6));
        }

        /**
         * 文件file进行加密
         * 
         * @param fileUrl
         *            文件路径
         * @param key
         *            密码
         * @throws Exception
         */
        public static void encrypt(String fileUrl, String key) throws Exception {
            File file = new File(fileUrl);
            String path = file.getPath();
            if (!file.exists()) {
                return;
            }
            int index = path.lastIndexOf("\");
            String destFile = path.substring(0, index) + "\" + "abc";
            System.out.println(destFile);
            File dest = new File(destFile);
            InputStream in = new FileInputStream(fileUrl);
            OutputStream out = new FileOutputStream(destFile);
            byte[] buffer = new byte[1024];
            int r;
            byte[] buffer2 = new byte[1024];
            while ((r = in.read(buffer)) > 0) {
                for (int i = 0; i < r; i++) {
                    byte b = buffer[i];
                    buffer2[i] = b == 255 ? 0 : ++b;
                }
                out.write(buffer2, 0, r);
                out.flush();
            }
            in.close();
            out.close();
            file.delete();
            dest.renameTo(new File(fileUrl));
            appendMethodA(fileUrl, key);
            System.out.println("加密成功");
        }

        /**
         * 
         * @param fileName
         * @param content
         *            密钥
         */
        public static void appendMethodA(String fileName, String content) {
            try {
                // 打开一个随机访问文件流,按读写方式
                RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
                // 文件长度,字节数
                long fileLength = randomFile.length();
                // 将写文件指针移到文件尾。
                randomFile.seek(fileLength);
                randomFile.writeBytes(content);
                randomFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        /**
         * 解密
         * 
         * @param fileUrl
         *            源文件
         * @param tempUrl
         *            临时文件
         * @param ketLength
         *            密码长度
         * @return
         * @throws Exception
         */
        public static String decrypt(String fileUrl, String tempUrl, int keyLength)
                throws Exception {
            File file = new File(fileUrl);
            if (!file.exists()) {
                return null;
            }
            File dest = new File(tempUrl);
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }

            InputStream is = new FileInputStream(fileUrl);
            OutputStream out = new FileOutputStream(tempUrl);

            byte[] buffer = new byte[1024];
            byte[] buffer2 = new byte[1024];
            byte bMax = (byte) 255;
            long size = file.length() - keyLength;
            int mod = (int) (size % 1024);
            int div = (int) (size >> 10);
            int count = mod == 0 ? div : (div + 1);
            int k = 1, r;
            while ((k <= count && (r = is.read(buffer)) > 0)) {
                if (mod != 0 && k == count) {
                    r = mod;
                }

                for (int i = 0; i < r; i++) {
                    byte b = buffer[i];
                    buffer2[i] = b == 0 ? bMax : --b;
                }
                out.write(buffer2, 0, r);
                k++;
            }
            out.close();
            is.close();
            return tempUrl;
        }

        /**
         * 判断文件是否加密
         * 
         * @param fileName
         * @return
         */
        public static String readFileLastByte(String fileName, int keyLength) {
            File file = new File(fileName);
            if (!file.exists())
                return null;
            StringBuffer str = new StringBuffer();
            try {
                // 打开一个随机访问文件流,按读写方式
                RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
                // 文件长度,字节数
                long fileLength = randomFile.length();
                // 将写文件指针移到文件尾。
                for (int i = keyLength; i >= 1; i--) {
                    randomFile.seek(fileLength - i);
                    str.append((char) randomFile.read());
                }
                randomFile.close();
                return str.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

    }

  • 相关阅读:
    socket.io带中文时客户端无法响应
    JQ树插件 — zTree笔记
    cecium 笔记
    express处理跨域问题,中间件 CORS
    一些接口
    express 3.5 Err: request aborted
    ovirt kvm嵌套虚拟化
    kvm实现快速增量盘模式的克隆脚本
    kvm命令
    kvm 中 Guest Is already in use 处理办法
  • 原文地址:https://www.cnblogs.com/zhwl/p/3655898.html
Copyright © 2011-2022 走看看