採用Cipher Des對文件加密、解密

package com.example.test;


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;


import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;


public class FileDeEncrypt {


   private Key desKey;


    public FileDeEncrypt(String keyStr) {
        genKey(keyStr);
    }


    private void genKey(String keyStr) {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(new SecureRandom(keyStr.getBytes()));
            desKey = keyGenerator.generateKey();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }


    /**
     * 文件file進行加密並保存目標文件destFile中
     *
     * @param file     要加密的文件 如c:/test/srcFile.txt
     * @param destFile 加密後存放的文件名 如c:/加密後文件.txt
     */
    public void encryptFile(String file, String destFile) {
        InputStream is = null;
        OutputStream out = null;
        CipherInputStream cis = null;
        try {
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, desKey);
            is = new FileInputStream(file);
            out = new FileOutputStream(destFile);
            cis = new CipherInputStream(is, cipher);
            byte[] buffer = new byte[1024];
            int r;
            while ((r = cis.read(buffer)) > 0) {
                out.write(buffer, 0, r);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cis.close();
                out.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 文件採用DES算法解密文件
     *
     * @param file 已加密的文件 如c:/加密後文件.txt * @param destFile 解密後存放的文件名 如c:/
     *             test/解密後文件.txt
     */
    public void decryptFile(String file, String dest) {
        InputStream is = null;
        OutputStream out = null;
        CipherOutputStream cos = null;
        try {
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, desKey);
            is = new FileInputStream(file);
            out = new FileOutputStream(dest);
            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);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cos.close();
                out.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 解密文件成字符串
     *
     * @param fileName
     * @return
     */
    public String decryptFile(String fileName) {
        InputStream is = null;
        CipherInputStream cis = null;
        BufferedReader buReader = null;
        try {
            Cipher cipherDecrypt = Cipher.getInstance("DES");
            cipherDecrypt.init(Cipher.DECRYPT_MODE, desKey);


            is = new FileInputStream(fileName);
            cis = new CipherInputStream(is, cipherDecrypt);
            buReader = new BufferedReader(new InputStreamReader(cis));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = buReader.readLine()) != null) {
                buffer.append(line);
            }
            is.close();
            cis.close();
            buReader.close();
            return buffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                is.close();
                cis.close();
                buReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

  /**
     * 解密文件成字符串
     *
     * @param is
     * @return
     */
    public String decryptFile(InputStream is) {
        CipherInputStream cis = null;
        BufferedReader buReader = null;
        try {
            Cipher cipherDecrypt = Cipher.getInstance("DES");
            cipherDecrypt.init(Cipher.DECRYPT_MODE, desKey);


            cis = new CipherInputStream(is, cipherDecrypt);
            buReader = new BufferedReader(new InputStreamReader(cis));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = buReader.readLine()) != null) {
                buffer.append(line);
            }
            is.close();
            cis.close();
            buReader.close();
            return buffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                cis.close();
                buReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileDeEncrypt fdn=new FileDeEncrypt("test");

fdn.encryptFile("e:/publicKey.keystore", "e:/r解密.keystore"); // 加密
fdn.decryptFile("e:/r解密.keystore", "e:/publicKey11.keystore"); // 解密
System.out.println(fdn.decryptFile("e:/r解密.keystore"));
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章