对称加密就是加密解密同时使用一个密钥
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.SecureRandom;
public class SymmetricEncoder {
/**
* 加密
*
* @param content 加密文本
* @return 加密后的文本
* @throws Exception
*/
private static String aesEncode(String content) throws Exception {
// 获取 加密器
Cipher cipher = getCipher(Cipher.ENCRYPT_MODE);
//加密内容的字节数组,指定字符集utf-8,否则解密时乱码
byte[] contentBytes = content.getBytes("utf-8");
//加密
byte[] bytes = cipher.doFinal(contentBytes);
return new String(new BASE64Encoder().encode(bytes));
}
/**
* 解密
*
* @param content 解密的文本
* @return 解密后的文本
* @throws Exception
*/
private static String aesDncode(String content) throws Exception {
// 获取 解密器
Cipher cipher = getCipher(Cipher.DECRYPT_MODE);
// 将加密并编码后的内容解码成字节数组
byte[] bytes = new BASE64Decoder().decodeBuffer(content);
// 解密
byte[] decodeByte = cipher.doFinal(bytes);
// 指定加密时的字符集
return new String(decodeByte, "utf-8");
}
/**
* 获取密码器
* <p>
* 对称加密 所以加密和解密使用同一个规则生成同一个密钥生成器(公钥 = 私钥)
* 使用同一个密钥生成器生成同一个密码器,即对称加密
*
* @param mode 加密(Cipher.Encrypt_mode)或解密(Cipher.Decrypt_mode)
* @return 密码器
* @throws Exception
*/
private static Cipher getCipher(int mode) throws Exception {
// 密钥生成器,指定为AES算法
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
// 根据规则初始化密钥生成器, 1234-> 自定义的字符串
keyGenerator.init(128, new SecureRandom(new String("1234").getBytes()));
// 产生对称密钥
SecretKey secretKey = keyGenerator.generateKey();
// 根据字节数组生成AES密钥
Key key = new SecretKeySpec(secretKey.getEncoded(), "AES");
// 根据指定算法AES自成密码器
Cipher cipher = Cipher.getInstance("AES");
// 初始化密码器
// 第一个参数为加密(Cipher.Encrypt_mode)或解密(Cipher.Decrypt_mode)
// 第二个参数为使用的KEY
cipher.init(mode, key);
return cipher;
}
public static void main(String[] args) throws Exception {
String e = aesEncode("床前明月光,疑是地上霜,举头望明月,低头思故乡");
System.out.println(e);
String d = aesDncode(e);
System.out.println(d);
}
}
控制台输出:
I/xtcl4/KraxXJ9GJOIVBmx6hQcpMdSfVVYV4ZidFPs9ylM7zVdED5HYK+a5aektYy4TCJvb321i
Ga0pXytI3w==
床前明月光,疑是地上霜,举头望明月,低头思故乡