package test;
import java.security.Key;
import java.security.SecureRandom;
import java.util.UUID;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class Test {
//算法
private static String algorithm="AES";
//自定义密钥,由uuid生成的32位字符串
/**
* uuid是128位整数 以16进制展现
*/
private static String key = UUID.randomUUID().toString().replaceAll("-","");
/**
* 生成密钥
* @return
* @throws Exception
*/
public static Key getKey(String strKey) throws Exception{
//创建密钥生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
//初始化密钥
keyGenerator.init(new SecureRandom(strKey.getBytes()));
//生成密钥
SecretKey secreKey = keyGenerator.generateKey();
// System.out.println("生成密钥:"+bytesToHexString(secreKey.getEncoded ())+"----"+bytesToHexString(secreKey.getEncoded ()).length());
return secreKey;
}
/**
* 加密
* @param ogStr
* @param strKey
* @return
* @throws Exception
* @throws Throwable
*/
public static String enCrypt(String ogStr,String strKey) throws Exception, Throwable{
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE,getKey(strKey));
String enStr = new String (cipher.doFinal(ogStr.getBytes()));
return enStr;
}
/**
* 解密
* @param enStr
* @param strKey
* @return
* @throws Exception
* @throws Throwable
*/
public static String deCrypt(String enStr,String strKey) throws Exception, Throwable {
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE,getKey(strKey));
String deStr = new String (cipher.doFinal(enStr.getBytes()));
return deStr;
}
public static void main(String[] args) throws Exception, Throwable {
String ogStr ="中华人民共和国";
byte[] enStr;
byte[] deStr;
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE,getKey(key));
enStr = cipher.doFinal(ogStr.getBytes());
System.out.println(new String(enStr));
cipher.init(Cipher.DECRYPT_MODE,getKey(key));
deStr = cipher.doFinal(enStr);
System.out.println(new String(deStr));
}
}