Package com.encryption

Source Code of com.encryption.DesEncrypter

package com.encryption;

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;

/**
* 利用DES加密算法实现一个加密类DesEncrypter
*
* @author lmq
*
*/

public class DesEncrypter {
  Cipher ecipher; // 此对象为加密和解密提供密码功能
  Cipher dcipher;

  public DesEncrypter(SecretKey key) {
    // Create an 8-byte initialization vector
    // 创建8位的初始向量
    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];

  /**
   * 加密输入流in的数据到输出流out
   *
   * @param in
   *            原始输入位流
   * @param out
   *            加密后的输出位流
   */
  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) {
    }
  }

  /**
   * 从加密的输入流in解密到输出流out
   *
   * @param in
   *            加密的输入流
   * @param out
   *            解密后的输出流
   */
  public void decrypt(InputStream in, OutputStream out) {
    try {
      // Bytes read from in will be decrypted
      // 解密从in读入的字节
      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) {
    }
  }
}
TOP

Related Classes of com.encryption.DesEncrypter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.