AES是目前对称加密中最流行算法之一。随着大数据越来越重要,信息安全随之人们开始关注起来。废话不多说。讲一讲AES加密。
- public static byte[] encrypt(String content, String password) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES"); // 创建AES的Key生产者
- kgen.init(128, new SecureRandom(password.getBytes())); //在安全性要求比较高的场合,应当使用 //SecureRandom
- SecretKey secretKey = kgen.generateKey(); //生成一个密钥
- byte[] enCodeFormat = secretKey.getEncoded(); // 返回编码格式的密钥
- SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); // 转换为AES专用密钥
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- byte[] byteContent = content.getBytes("utf-8");
- cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化加密模式
- byte[] result = cipher.doFinal(byteContent); //加密
- return result;
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- }
- return null;
- }
下面是解密的过程基本都差不多
- public static byte[] decrypt(byte[] content, String password) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- kgen.init(128, new SecureRandom(password.getBytes()));
- SecretKey secretKey = kgen.generateKey();
- byte[] enCodeFormat = secretKey.getEncoded();
- SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
- byte[] result = cipher.doFinal(content);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- }
- return null;
- }
主要是种子一定是一样的。才能正确的加解密。而且如果是用字节转换为字符串形式加解密的话,会报异常。这里就要用到二进制转换为16进制的,
然后间接转换为2进制的解密。