使用DES方式,加、解密字符

1.使用一个简单方式,来实现加解密:

package org.demo.util;

import org.apache.log4j.Logger;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 数据加、解密工具类。
 * <p>
 *  由于密码不能明码显示,所以需要加密,此处利用java自带的base64实现加密、解密。
 *
 * @author wangxinyu
 *
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class DesUtil {
	private final static String DES = "DES";
	private static final Logger logger = Logger.getLogger(DesUtil.class);

	/**
	 * 
	 * 数据加密。 <p>
	 * 	 密钥位数一定要是8的倍速
	 *
	 * @author wangxinyu
	 *
	 * @param data	需要加密字符
	 * @return
	 */
	public static String encrypt(String data) {
		byte[] bt = null;
		String strs = null;
		try {
			// 最简单转码方式(不建议用) 
			bt = data.getBytes("utf-8");
		} catch (Exception e) {
			logger.error("转码失败");
			e.printStackTrace();
		}
		if (bt != null) {
			strs = new BASE64Encoder().encode(bt);
		}
		return strs;
	}

	/**
	 * 
	 * 数据解密<p>
	 *   密钥位数一定要是8的倍速
	 *
	 * @author wangxinyu
	 *
	 * @param data	需要加密字符
	 * @param key 	密钥
	 * @return
	 */
	public static String decrypt(String data) {
		if(data == null){
			return null;
		}
		
		byte[] result = null;
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			byte[] bt = decoder.decodeBuffer(data);
			result = new String(bt, "utf-8");	
		} catch (Exception e) {
			logger.error("解码失败");
			e.printStackTrace();
		}
		return new String(result);
	}
	
}
上面这种加密方式对于高手来说分分钟就解了。
**如果sun.mics.*类无法加载,请参考http://blog.csdn.net/wangxy799/article/details/50519252

2.DES方式

所以需要使用别的算法才能加强安全(前提是别人不知道的算法),下面就使用DES方式(跟人说了算法这也跟明文一样),直接上代码:

package org.demo.util;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import org.apache.log4j.Logger;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 数据加、解密工具类。
 * <p>
 *  由于密码不能明码显示,所以需要加密,此处利用java自带的base64实现加密、解密。
 *   同时使用DES加密方式,将数据转换成二进制.
 *
 * @author wangxinyu
 *
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class DesUtil {
	private final static String DES = "DES";
	private static final Logger logger = Logger.getLogger(DesUtil.class);
	/** 密钥  密钥长度都必须是8的倍数
	private static final String KEY = "1234567887654321";*/

	/**
	 * 
	 * 数据加密。 <p>
	 * 	 密钥位数一定要是8的倍速
	 *
	 * @author wangxinyu
	 *
	 * @param data	需要加密字符
	 * @param key 	密钥
	 * @return
	 */
	public static String encrypt(String data,String key) {
		byte[] bt = null;
		String strs = null;
		try {
			// 最简单转码方式(不建议用) 
			//bt = data.getBytes("utf-8");
			
			// 使用DES技术编码 
			bt = encrypt(data.getBytes(),key.getBytes());
		} catch (Exception e) {
			logger.error("转码失败");
			e.printStackTrace();
		}
		if (bt != null) {
			strs = new BASE64Encoder().encode(bt);
		}
		return strs;
	}

	/**
	 * 
	 * 数据解密<p>
	 *   密钥位数一定要是8的倍速
	 *
	 * @author wangxinyu
	 *
	 * @param data	需要加密字符
	 * @param key 	密钥
	 * @return
	 */
	public static String decrypt(String data,String key) {
		if(data == null){
			return null;
		}
		
		byte[] result = null;
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			byte[] bt = decoder.decodeBuffer(data);
			// 使用DES技术编码 
			result = decrypt(bt,key.getBytes());
			
			//result = new String(bt, "utf-8");	
		} catch (Exception e) {
			logger.error("解码失败");
			e.printStackTrace();
		}
		return new String(result);
	}
	
	
	/**
	 * DES加密
	 * 
	 * @param data
	 * @param key 密钥
	 * @return
	 * @throws Exception
	 */
	/**
	DES加密介绍
	DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
	后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
	24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现
	。
	注意:DES加密和解密过程中,密钥长度都必须是8的倍数
	*/
	private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
		// 生成一个可信任的随机数源
		SecureRandom sr = new SecureRandom();

		// 从原始密钥数据创建DESKeySpec对象
		DESKeySpec dks = new DESKeySpec(key);

		// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
		SecretKey securekey = keyFactory.generateSecret(dks);

		// Cipher对象实际完成加密操作
		Cipher cipher = Cipher.getInstance(DES);

		// 用密钥初始化Cipher对象
		cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

		return cipher.doFinal(data);
	}

	/**
	 * DES解密
	 * 
	 * @param data
	 * @param key 密钥
	 * @return
	 * @throws Exception
	 */
	private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
		// 生成一个可信任的随机数源
		SecureRandom sr = new SecureRandom();

		// 从原始密钥数据创建DESKeySpec对象
		DESKeySpec dks = new DESKeySpec(key);

		// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
		SecretKey securekey = keyFactory.generateSecret(dks);

		// Cipher对象实际完成解密操作
		Cipher cipher = Cipher.getInstance(DES);

		// 用密钥初始化Cipher对象
		cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

		return cipher.doFinal(data);
	}
}

测试:

import org.apache.log4j.Logger;
import org.demo.util.DesUtil;
import org.junit.Test;

import com.sun.corba.se.impl.oa.poa.ActiveObjectMap.Key;


public class DesUtilTest {
	private static final Logger logger = Logger.getLogger(DesUtilTest.class);
	//密钥位数一定要是8的倍速
	private String key = "1234567887654321";
	
	@Test
	public void des(){
		//加密
		String str = DesUtil.encrypt("王哥",key);
		logger.info(str);

		//解密
		String result = DesUtil.decrypt("un3XeSFsOiM=",key);
		logger.info(result);
	}
}

**成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值