zoukankan      html  css  js  c++  java
  • DES 文件加密解密

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.security.Key;
    import java.security.SecureRandom;
    import javax.crypto.Cipher;
    import javax.crypto.CipherInputStream;
    import javax.crypto.CipherOutputStream;
    import javax.crypto.KeyGenerator;
    
    public class DocumentDES {
    
        Key key;
    
        public DocumentDES(String str) {
            getKey(str);// 生成密匙
        }
    
        /**
         * 
         * @功能:根据参数生成KEY
         * @参数:
         * @param strKey
         * @返回参数:void
         * @修改人:
         * @修改时间:
         */
        public void getKey(String strKey) {
            try {
                KeyGenerator _generator = KeyGenerator.getInstance("DES");
                _generator.init(new SecureRandom(strKey.getBytes()));
                this.key = _generator.generateKey();
                _generator = null;
            } catch (Exception e) {
                throw new RuntimeException(
                        "Error initializing SqlMap class. Cause: " + e);
            }
        }
    
      
        /**
         * 
         * @功能:文件file进行加密并保存目标文件destFile中
         * @参数:
         * @param file
         *            要加密的文件 如c:/test/srcFile.txt
         * @param destFile
         *            加密后存放的文件名 如c:/加密后文件.txt
         * @修改人:
         * @修改时间:
         */
        public void encrypt(String file, String destFile) throws Exception {
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, this.key);
            InputStream is = new FileInputStream(file);
            OutputStream out = new FileOutputStream(destFile);
            CipherInputStream cis = new CipherInputStream(is, cipher);
            byte[] buffer = new byte[1024];
            int r;
            while ((r = cis.read(buffer)) > 0) {
                out.write(buffer, 0, r);
            }
            cis.close();
            is.close();
            out.close();
        }
    
        /**
         * 
         * @功能: 文件采用DES算法解密文件
         * @param file
         *            已加密的文件 如c:/加密后文件.txt
         * @param dest
         *            解密后存放的文件名 如c:/ test/解密后文件.txt
         * @返回参数:void
         * @修改人:
         * @修改时间:
         */
        public void decrypt(String file, String dest) throws Exception {
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, this.key);
            InputStream is = new FileInputStream(file);
            OutputStream out = new FileOutputStream(dest);
            CipherOutputStream cos = new CipherOutputStream(out, cipher);
            byte[] buffer = new byte[1024];
            int r;
            while ((r = is.read(buffer)) >= 0) {
                System.out.println();
                cos.write(buffer, 0, r);
            }
            cos.close();
            out.close();
            is.close();
        }
    
        public static void main(String[] args) throws Exception {
            DocumentDES td = new DocumentDES("aaa");
            td.encrypt("g:/待加密文件.xlsx", "g:/加密文件.xlsx"); // 加密
            td.decrypt("g:/加密文件.xlsx", "g:/解密文件.xlsx"); // 解密
        }
    }
  • 相关阅读:
    IO 单个文件的多线程拷贝
    day30 进程 同步 异步 阻塞 非阻塞 并发 并行 创建进程 守护进程 僵尸进程与孤儿进程 互斥锁
    day31 进程间通讯,线程
    d29天 上传电影练习 UDP使用 ScketServer模块
    d28 scoket套接字 struct模块
    d27网络编程
    d24 反射,元类
    d23 多态,oop中常用的内置函数 类中常用内置函数
    d22 封装 property装饰器 接口 抽象类 鸭子类型
    d21天 继承
  • 原文地址:https://www.cnblogs.com/ling-1991/p/7493821.html
Copyright © 2011-2022 走看看