• JAVA AES CBC PKCS5Padding加解密


    package com.hzxc.groupactivity.util;
    
    /**
     * Created by hdwang on 2019/1/17.
     */
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    
    /**
     *  加密工具类
     */
    public class AESUtil {
        private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);
    
        private static final String KEY_ALGORITHM = "AES";
        private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";//默认的加密算法
    
        /**
         * AES 加密操作
         *
         * @param content 待加密内容
         * @param password 加密密码
         * @param iv 使用CBC模式,需要一个向量iv,可增加加密算法的强度
         * @return 加密数据
         */
        public static byte[] encrypt(String content, String password,String iv) {
            try {
                //创建密码器
                Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
    
                //密码key(超过16字节即128bit的key,需要替换jre中的local_policy.jar和US_export_policy.jar,否则报错:Illegal key size)
                SecretKeySpec keySpec = new SecretKeySpec(password.getBytes("utf-8"),KEY_ALGORITHM);
    
                //向量iv
                IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8"));
    
                //初始化为加密模式的密码器
                cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivParameterSpec);
    
                //加密
                byte[] byteContent = content.getBytes("utf-8");
                byte[] result = cipher.doFinal(byteContent);
    
                return result;
            } catch (Exception ex) {
                logger.error(ex.getMessage(),ex);
            }
    
            return null;
        }
    
        /**
         * AES 解密操作
         *
         * @param content 密文
         * @param password 密码
         * @param iv 使用CBC模式,需要一个向量iv,可增加加密算法的强度
         * @return 明文
         */
        public static String decrypt(byte[] content, String password,String iv) {
    
            try {
                //创建密码器
                Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
    
                //密码key
                SecretKeySpec keySpec = new SecretKeySpec(password.getBytes("utf-8"),KEY_ALGORITHM);
    
                //向量iv
                IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8"));
    
                //初始化为解密模式的密码器
                cipher.init(Cipher.DECRYPT_MODE,keySpec,ivParameterSpec);
    
                //执行操作
                byte[] result = cipher.doFinal(content);
    
                return new String(result,"utf-8");
            } catch (Exception ex) {
                logger.error(ex.getMessage(),ex);
            }
    
            return null;
        }
    
    
    
    }

    参考网址:

    https://www.cnblogs.com/lilinzhiyu/p/8024100.html

  • 相关阅读:
    JSONModel的使用
    gitHub那些优秀的库和想要实现的效果
    CALayer的mask属性
    透明的UITableView
    iOS 常用随机数
    UIView的 形变属性transform
    ARGB色彩模式
    封闭折线图形的渐变色
    iOS系统日历选择问题
    每天积累一点新知识
  • 原文地址:https://www.cnblogs.com/hdwang/p/10286407.html
Copyright © 2020-2023  润新知