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();

  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值