java使⽤秘钥对字符串进⾏加密、解密java使⽤秘钥对字符串进⾏加密、解密
batis.plus.utils;
import java.io.IOException;
import java.security.SecureRandom;
pto.Cipher;
pto.SecretKey;
pto.SecretKeyFactory;
pto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* DES加密解密算法
* @author zhangdi
*
*/
public class DesUtil {
private final static String DES = "DES";
private final static String ENCODE = "GBK";
private final static String defaultKey = "netwxactive";
/**
* 使⽤默认key 加密
* @param data 待加密数据
* @return
* @throws Exception
*/
public static String encrypt(String data) throws Exception {
byte[] bt = Bytes(ENCODE), Bytes(ENCODE));
String strs = new BASE64Encoder().encode(bt);
return strs;
}
/**
* 使⽤默认key 解密
* @param data 待解密数据
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data) throws IOException, Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf, Bytes(ENCODE));
return new String(bt, ENCODE);
}
/**
* Description 根据键值进⾏加密
* @param data 待加密数据
* @param key 密钥
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) throws Exception {
byte[] bt = Bytes(ENCODE), Bytes(ENCODE));
String strs = new BASE64Encoder().encode(bt);
return strs;密码字符串是什么
}
/**
* 根据键值进⾏解密
* @param data 待解密数据
* @param key    密钥
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data, String key) throws IOException,
Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf, Bytes(ENCODE));
return new String(bt, ENCODE);
}
/**
* Description 根据键值进⾏加密
*
* @param data
* @param key
*            加密键byte数组
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// ⽣成⼀个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
/
/ 创建⼀个密钥⼯⼚,然后⽤它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = Instance(DES);
SecretKey securekey = ateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Instance(DES);
// ⽤密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* Description 根据键值进⾏解密
*
* @param data
* @param key 加密键byte数组
* @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 = Instance(DES);
SecretKey securekey = ateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Instance(DES);
// ⽤密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
public static void main(String[] args){
String data = "我是需要被加密的数据";
/
/ 这⾥的key长度必须⼤于8位
String key ="12345678";
System.out.println("初始数据===>"+data);
try {
System.out.println();
System.out.println(">>>>>>>>>>根据预定秘钥加密后:" + encrypt(data, key));
System.out.println(">>>>>>>>>>根据预定秘钥解密后:" + decrypt(encrypt(data, key), key));
System.out.println("==========================================");
String encrypt = encrypt(data);
System.out.println(">>>>>>>>>>默认秘钥加密后:"+encrypt);
System.out.println(">>>>>>>>>>默认秘钥解密后:"+decrypt(encrypt));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。