DES 加密,解密方式

/**
 * @(#)Eryptogram.java 1.00 04/03/11
 *
 * Copyright (c) 2003-2004 Abacus,Ltd.
 *
 * 加密解密類
 *
 *
 *
 */
package cn.com.sinosoft.smp.util;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.servlet.http.HttpServletRequest;

import com.uncnet.framework.utils.permission;

/**
 * 加密解密類

 */
public class Eryptogram {
 private static String Algorithm = "DES";
 // 定義 加密算法,可用 DES,DESede,Blowfish
 static boolean debug = false;

 /**
  * 構造子註解.
  */
 public Eryptogram() {

 }

 /**
  * 生成密鑰
  *
  * @return byte[] 返回生成的密鑰
  * @throws exception
  *             扔出異常.
  */
 public static byte[] getSecretKey() throws Exception {
  KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
  SecretKey deskey = keygen.generateKey();
  if (debug)
   System.out.println("生成密鑰:" + byte2hex(deskey.getEncoded()));
  return deskey.getEncoded();

 }

 /**
  * 將指定的數據根據提供的密鑰進行加密
  *
  * @param input
  *            需要加密的數據
  * @param key
  *            密鑰
  * @return byte[] 加密後的數據
  * @throws Exception
  */
 public static byte[] encryptData(byte[] input, byte[] key) throws Exception {
  SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
  if (debug) {
   System.out.println("加密前的二進串:" + byte2hex(input));
   System.out.println("加密前的字符串:" + new String(input));

  }
  Cipher c1 = Cipher.getInstance(Algorithm);
  c1.init(Cipher.ENCRYPT_MODE, deskey);
  byte[] cipherByte = c1.doFinal(input);
  if (debug)
   System.out.println("加密後的二進串:" + byte2hex(cipherByte));
  return cipherByte;

 }

 /**
  * 將給定的已加密的數據通過指定的密鑰進行解密
  *
  * @param input
  *            待解密的數據
  * @param key
  *            密鑰
  * @return byte[] 解密後的數據
  * @throws Exception
  */
 public static byte[] decryptData(byte[] input, byte[] key) throws Exception {
  SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
  if (debug)
   System.out.println("解密前的信息:" + byte2hex(input));
  Cipher c1 = Cipher.getInstance(Algorithm);
  c1.init(Cipher.DECRYPT_MODE, deskey);
  byte[] clearByte = c1.doFinal(input);
  if (debug) {
   System.out.println("解密後的二進串:" + byte2hex(clearByte));
   System.out.println("解密後的字符串:" + (new String(clearByte)));

  }
  return clearByte;

 }

 /**
  * 字節碼轉換成16進制字符串
  *
  * @param byte[]
  *            b 輸入要轉換的字節碼
  * @return String 返回轉換後的16進制字符串
  */
 public static String byte2hex(byte[] b) {
  String hs = "";
  String stmp = "";
  for (int n = 0; n < b.length; n++) {
   stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
   if (stmp.length() == 1)
    hs = hs + "0" + stmp;
   else
    hs = hs + stmp;
   if (n < b.length - 1)
    hs = hs + ":";

  }
  return hs.toUpperCase();

 }
 public String encryptData1(HttpServletRequest request){
  permission userperm =
   (permission) request.getSession().getAttribute("PermMgr");
  Eryptogram etg = new Eryptogram();
  String data1 = userperm.getUsername()+","+userperm.getUserid();
  byte[] key;
  byte[] en = null;;
  try {
   key = etg.getSecretKey();
   byte[] data = data1.getBytes();
   en = etg.encryptData(data, key);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return new String(en);
 }
 public byte[] encryptData2(HttpServletRequest request){
  permission userperm =
   (permission) request.getSession().getAttribute("PermMgr");
  Eryptogram etg = new Eryptogram();
  String data1 = userperm.getUsername()+","+userperm.getUserid();
  byte[] key;
  byte[] en = null;;
  try {
   key = etg.getSecretKey();
   byte[] data = data1.getBytes();
   en = etg.encryptData(data, key);
//   return byte2hex(en);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return en;
 }
 public static void main(String[] args) {
  try {
   debug = false;
   Eryptogram etg = new Eryptogram();
   byte[] key = etg.getSecretKey();
   System.out.println("key = " + key);
   String aa = "ck==1234567";
   byte[] data = aa.getBytes();
   System.out.println(data);
   byte[] en = etg.encryptData(data, key);
   System.out.println("encryptData = " + new String(en));
   byte[] de = etg.decryptData(en, key);
   System.out.println("decryptData = " + new String(de));

  } catch (Exception e) {
   e.printStackTrace();

  }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章