Tiger_Dog

Java使用DES加解密文件

编号:A3GS_TJ20100108005

描述

本文讲述了如何在Java下使用DES加密文件。

例子

NO

技术实现:     

导入包

import java.io.InputStream;

import java.io.OutputStream;

import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;

import javax.crypto.CipherInputStream;

import javax.crypto.CipherOutputStream;

import javax.crypto.SecretKey;

import javax.crypto.spec.IvParameterSpec;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

实现代码

1.  创建DesEncrypter加解密类

 

public class DesEncrypter {

    Cipher ecipher;

    Cipher dcipher;

 

    DesEncrypter(SecretKey key) {

        // Create an 8-byte initialization vector

        byte[] iv = new byte[]{

            (byte)0x8E, 0x12, 0x39, (byte)0x9C,

            0x07, 0x72, 0x6F, 0x5A

        };

        AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);

        try {

            ecipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

            dcipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

 

            // CBC requires an initialization vector

            ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);

            dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);

        } catch (java.security.InvalidAlgorithmParameterException e) {

        } catch (javax.crypto.NoSuchPaddingException e) {

        } catch (java.security.NoSuchAlgorithmException e) {

        } catch (java.security.InvalidKeyException e) {

        }

    }

 

    // Buffer used to transport the bytes from one stream to another

    byte[] buf = new byte[1024];

 

    public void encrypt(InputStream in, OutputStream out) {

        try {

            // Bytes written to out will be encrypted

            out = new CipherOutputStream(out, ecipher);

 

            // Read in the cleartext bytes and write to out to encrypt

            int numRead = 0;

            while ((numRead = in.read(buf)) >= 0) {

                out.write(buf, 0, numRead);

            }

            out.close();

        } catch (java.io.IOException e) {

        }

    }

 

    public void decrypt(InputStream in, OutputStream out) {

        try {

            // Bytes read from in will be decrypted

            in = new CipherInputStream(in, dcipher);

 

            // Read in the decrypted bytes and write the cleartext to out

            int numRead = 0;

            while ((numRead = in.read(buf)) >= 0) {

                out.write(buf, 0, numRead);

            }

            out.close();

        } catch (java.io.IOException e) {

        }

    }

}

2.  测试DesEncrypter加解密类

public class Test {

    public static void main(String[] args) {

       try {

           // Generate a temporary key. In practice, you would save this key.

           // See also Encrypting with DES Using a Pass Phrase.

           SecretKey key = KeyGenerator.getInstance("DES").generateKey();

 

           // Create encrypter/decrypter class

           DesEncrypter encrypter = new DesEncrypter(key);

 

           // Encrypt

           encrypter.encrypt(new FileInputStream("C:\\test.doc"),

               new FileOutputStream("C:\\test.des"));

 

           // Decrypt

           encrypter.decrypt(new FileInputStream("C:\\test.des"),

               new FileOutputStream("C:\\test_out.doc"));

       } catch (Exception e) {

           System.out.println("Exception");

       }

    }

}

posted on 2011-04-11 10:23  Tiger_Dog  阅读(1471)  评论(1)    收藏  举报

导航