用Java编写的密码算法类

  package data;
  import java.security.*;
  import javax.crypto.*;
  import javax.crypto.spec.*;
  import java.io.*;
  /**
  *Security提供了一个安全算法类,其中包括对称密码算法和散列算法
  */
  public final class Security
  {
  /**
  *对称加密方法
  * param byteSource需要加密的数据
  * return经过加密的数据
  * throws Exception
  */
  public static byte[]symmetricEncrypto(byte[]byteSource)throws Exception
  {
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  try
  {
  int mode=Cipher.ENCRYPT_MODE;
  SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("DES");
  byte[]keyData={1,9,8,2,0,8,2,1};
  DESKeySpec keySpec=new DESKeySpec(keyData);
  Key key=keyFactory.generateSecret(keySpec);
  Cipher cipher=Cipher.getInstance("DES");
  cipher.init(mode,key);
  int blockSize=cipher.getBlockSize();
  int position=0;
  int length=byteSource.length;
  boolean more=true;
  while(more)
  {
  if(position+blockSize<=length)
  {
  baos.write(cipher.update(byteSource,position,blockSize));
  position+=blockSize;
  }
  else
  {
  more=false;
  }
  }
  if(position<length)
  {
  baos.write(cipher.doFinal(byteSource,position,length-position));
  }
  else
  {
  baos.write(cipher.doFinal());
  }
  return baos.toByteArray();
  }
  catch(Exception e)
  {
  throw e;
  }
  finally
  {
  baos.close();
  }
  }
  /**
  *对称解密方法
  * param byteSource需要解密的数据
  * return经过解密的数据
  * throws Exception
  */
  public static byte[]symmetricDecrypto(byte[]byteSource)throws Exception
  {
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  try
  {
  int mode=Cipher.DECRYPT_MODE;
  SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("DES");
  byte[]keyData={1,9,8,2,0,8,2,1};
  DESKeySpec keySpec=new DESKeySpec(keyData);
  Key key=keyFactory.generateSecret(keySpec);
  Cipher cipher=Cipher.getInstance("DES");
  cipher.init(mode,key);
  int blockSize=cipher.getBlockSize();
  int position=0;
  int length=byteSource.length;
  boolean more=true;
  while(more)
  {
  if(position+blockSize<=length)
  {
  baos.write(cipher.update(byteSource,position,blockSize));
  position+=blockSize;
  }
  else
  {
  more=false;
  }
  }
  if(position<length)
  {
  baos.write(cipher.doFinal(byteSource,position,length-position));
  }
  else
  {
  baos.write(cipher.doFinal());
  }
  return baos.toByteArray();
  }
  catch(Exception e)
  {
  throw e;
  }
  finally
  {
  baos.close();
  }
  }
  /**
  *散列算法
  * param byteSource需要散列计算的数据
  * return经过散列计算的数据
  * throws Exception
  */
  public static byte[]hashMethod(byte[]byteSource)throws Exception
  {
  try
  {
  MessageDigest currentAlgorithm=MessageDigest.getInstance("SHA-1");
  currentAlgorithm.reset();
  currentAlgorithm.update(byteSource);
  return currentAlgorithm.digest();
  }
  catch(Exception e)
  {
  throw e;
  }
  }
  }