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);
}
}
**成功