Java加密AES算法及spring中应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于Java加密AES算法及spring中应用的主要内容,如果未能解决你的问题,请参考以下文章