Java加密AES算法及spring中应用

开门见山直接贴上代码

1.AESUtil加密解密工具类
    import java.security.Key;
    import java.security.SecureRandom;
    import java.util.Base64;

    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;

    /**
     * @description: AES加密工具类
     * @author: maojialong
     * @date: 2017年11月7日 上午10:11:02
     */
    public class AESUtils {

        //实例化密钥
        private static Key key;

        //原始密钥
        private static String KEY_STR = "my-springmvc-2017-11-07";

        //编码
        private static String CHARSETNAME = "UTF-8";

        //密钥算法
        private static String KEY_ALGORITHM = "AES";

        //加密-解密算法 / 工作模式 / 填充方式
        private static String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";

        /**
         * 初始化key
         */
        static {
            try {
                KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
                SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
                random.setSeed(KEY_STR.getBytes());
                kgen.init(128, random);
                key = kgen.generateKey();
                kgen = null;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

        /**
         * @description: AES对称加密字符串,并通过Jdk自带Base64转换为ASCII
         * @author: Administrator
         * @date: 2017年11月7日 上午9:37:48
         * @param str
         * @return
         */
        public static String getEncryptString(String str) {
            try {
                byte[] bytes = str.getBytes(CHARSETNAME);
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] doFinal = cipher.doFinal(bytes);
                return Base64.getEncoder().encodeToString(doFinal);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

        /**
         * @description: 对AES加密字符串进行解密
         * @author: maojialong
         * @date: 2017年11月7日 上午10:14:00
         * @param str
         * @return
         */
        public static String getDecryptString(String str) {
            try {
                byte[] bytes = Base64.getDecoder().decode(str);
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, key);
                byte[] doFinal = cipher.doFinal(bytes);
                return new String(doFinal, CHARSETNAME);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }

2.自定义配置文件解析类
    import java.util.List;

    import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

    /**
     * @description: 自定义AES解密
     * @author: maojialong
     * @date: 2017年11月7日 上午10:26:50
     */
    public class EncodeAESPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

        private List<String> encodeProperties;

        /**
         * @description: 重写convertProperty方法,通过encodeProperties判断是否是经过AES加密
         * @author: maojialong
         * @date: 2017年11月7日 上午10:27:24
         * @param propertyName
         * @param propertyValue
         * @return
         * @see org.springframework.beans.factory.config.PropertyResourceConfigurer#convertProperty(java.lang.String, java.lang.String)
         * TODO
         */
        @Override
        protected String convertProperty(String propertyName, String propertyValue) {
            if(encodeProperties != null && encodeProperties.contains(propertyName)) {
                propertyValue = AESUtils.getDecryptString(propertyValue);
            }
            return super.convertProperty(propertyName, propertyValue);
        }

        public List<String> getEncodeProperties() {
            return encodeProperties;
        }

        public void setEncodeProperties(List<String> encodeProperties) {
            this.encodeProperties = encodeProperties;
        }
    }

3.配置文件中加载配置文件
    <!-- 自定义AES加密解密 -->
    <bean id="propertyConfigurer" class="util.EncodeAESPlaceholderConfigurer">
        <!-- 配置文件地址 -->
        <property name="locations">
            <list>
                <value>classpath:conf/jdbc.properties</value>
                <value>classpath:redis.properties</value>
            </list>
        </property>
        <!-- 配置需要解密的配置项 -->
        <property name="encodeProperties">
            <array>
                <value>jdbc.url</value>
                <value>jdbc.username</value>
                <value>jdbc.password</value>
            </array>
        </property>
    </bean>
时间: 2024-10-09 23:24:27

Java加密AES算法及spring中应用的相关文章

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht

Java 加密 AES 对称加密算法

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

Java——面向切面编程,Spring中的AOP编程

面向切面编程 AOP思想:将横向重复代码,纵向抽取出来 AOP体现--Filter AOP体现--拦截器 AOP体现--动态代理 Spring中实现AOP思想 原理:Spring可以为容器中管理的对象生成代理对象 代理分为动态代理和cglib代理: 动态代理(优先) 被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术,换句话说,就是代理对象和被代理要实现同一接口 cglib代理 第三方代理技术,cglib代理,可以对任何类生成代理,代理的原理是对目标对象进行继承代理,

AES加密解密算法——使用.NET中Rijndael实现

public sealed class RijndaelEncDec { /// <summary> /// 初始化加密的key /// </summary> public static string Password { get;set; } private static byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael

java加密解密算法记录

package com.algorithm; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; im

java 加密解密算法MD5/SHA1,DSA

通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用. 第1章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

Spring中List、Set、Map、数组注入方式中标签的使用

在这里不多说,直接进入正题,在使用Spring时,如果对象实例含有数据或集合属性时,那我们该如何去配置Spring.xml呢?我们就需要property下的子元素list,set,map等子元素.示例为: <bean> <property> <list>--</list> or <set>--</set> or <map>--</map> </property> </bean> [转载使

Java加密技术(十)——单向认证

在 Java 加密技术(九)中,我们使用自签名证书完成了认证.接下来,我们使用第三方CA签名机构完成证书签名. 这里我们使用 thawte提供的测试用21天免费ca证书. 1.要在该网站上注明你的域名,这里使用 www.zlex.org作为测试用域名(请勿使用该域名作为你的域名地址,该域名受法律保护!请使用其他非注册域名!). 2.如果域名有效,你会收到邮件要求你访问 https://www.thawte.com/cgi/server/try.exe获得ca证书. 3.复述密钥库的创建. She