首页 > 开发程序 > Java > 正文


JAVA使用DES方法对文件进行加解密

04-25 22:19:48   来源:shikezhi   评论: 点击:

JAVA如何使用DES对文件进行加解密?
Java如何使用DES对文件进行加解密?

JAVA 使用DES方法对文件进行加解密

package com.tangzq.utils;

import org.apache.commons.io.IOUtils;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.Key;

public class ImageDES {
    /**
     * 加密解密的key
     */
    private Key mKey;
    /**
     * 解密的密码
     */
    private Cipher mDecryptCipher;
    /**
     * 加密的密码
     */
    private Cipher mEncryptCipher;

    public 
ImageDES (String key) throws Exception {
        initKey(key);
        initCipher();
    }

    /**
     * 创建一个加密解密的key
     *
     * @param keyRule
     */
    public void initKey(String keyRule) {
        byte[] keyByte = keyRule.getBytes();
        // 创建一个空的八位数组,默认情况下为0
        byte[] byteTemp = new byte[8];
        // 将用户指定的规则转换成八位数组
        for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {
            byteTemp[i] = keyByte[i];
        }
        mKey = new SecretKeySpec(byteTemp, "DES");
    }

    /**
     * 初始化加载密码
     *
     * @throws Exception
     */
    private void initCipher() throws Exception {
        mEncryptCipher = Cipher.getInstance("DES");
        mEncryptCipher.init(Cipher.ENCRYPT_MODE, mKey);

        mDecryptCipher = Cipher.getInstance("DES");
        mDecryptCipher.init(Cipher.DECRYPT_MODE, mKey);
    }

    /**
     * 加密文件
     *
     * @param in
     * @param savePath 加密后保存的位置
     */
    public void doEncryptFile(InputStream in, String savePath) {
        if (in == null) {
            System.out.println("inputstream is null");
            return;
        }
        try {
            CipherInputStream cin = new CipherInputStream(in, mEncryptCipher);
            OutputStream os = new FileOutputStream(savePath);
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = cin.read(bytes)) > 0) {
                os.write(bytes, 0, len);
                os.flush();
            }
            os.close();
            cin.close();
            in.close();
            System.out.println("加密成功");
        } catch (Exception e) {
            System.out.println("加密失败");
            e.printStackTrace();
        }
    }

    /**
     * 加密文件
     *
     * @param filePath 需要加密的文件路径
     * @param savePath 加密后保存的位置
     * @throws java.io.FileNotFoundException
     */
    public void doEncryptFile(String filePath, String savePath) throws FileNotFoundException {
        doEncryptFile(new FileInputStream(filePath), savePath);
    }


    /**
     * 解密文件
     *
     * @param encodedFileInputStream
     */
    public void doDecryptFile(InputStream encodedFileInputStream, String decodeFilePath) {
        if (encodedFileInputStream == null) {
            System.out.println("inputstream is null");
            return;
        }
        try {
            CipherInputStream cin = new CipherInputStream(encodedFileInputStream, mDecryptCipher);
//                BufferedReader reader = new BufferedReader(new InputStreamReader(cin)) ;
//                BufferedOutputStream bos=new BufferedOutputStream( new FileOutputStream(filePath));
//                String line = null;
//                while((line=reader.readLine())!=null)
//                {
//                    //System.out.println(line);
//                }
//               reader.close();
            IOUtils.copy(cin, new FileOutputStream(decodeFilePath));
            cin.close();
            encodedFileInputStream.close();
            System.out.println("解密成功");
        } catch (Exception e) {
            System.out.println("解密失败");
            e.printStackTrace();
        }
    }

    /**
     * 解密文件
     *
     * @param encodedFilePath 加密后的文件路径
     * @param decodeFilePath  解密后的文件存放路径
     * @throws Exception
     */
    public void doDecryptFile(String encodedFilePath, String decodeFilePath) throws Exception {
        doDecryptFile(new FileInputStream(encodedFilePath), decodeFilePath);
    }


    public static void main(String[] args) throws Exception {
        //FileDES的构造器参数为加解密使用到的key,可以任意设置
        
ImageDES  imageDES = new ImageDES ("mysecrt");
        imageDES.doEncryptFile("S:\\test.txt", "S:\\testhelloaaa.txt");  //加密
        imageDES.doDecryptFile("S:\\testaaa.txt", "S:\\testppp.txt"); //解密
    }
}

相关热词搜索:JAVA DES

上一篇:Java学习笔记 下一篇:JAVA log4j.properties 使用详解
分享到: 收藏