使用AES加密配置文件
考虑到数据库连接密码直接配置在xml中,项目流转出现密码泄露隐患,这里直接对密码进行AES加密
<!-- 配置 读取properties文件 jdbc.properties -->
<bean class="com.yehuishou.util.ConvertPwdPropertyConfigurer">
<property name="location" value="classpath:jdbc.properties" />
<property name="fileEncoding" value="utf-8" />
</bean>
配置bean指定数据库文件的位置, class属性为重新的方法所在是全类名. 下面的
public class ConvertPwdPropertyConfigurer extends PropertyPlaceholderConfigurer {
//"driverClassName", "url", "username", "password" 必须与配置文件内的名字一致
private String[] encryptPropNames = { "driverClassName", "url", "username", "password" };
@Override
protected String convertProperty(String propertyName, String propertyValue) {
// 如果在加密属性名单中发现该属性
if (isEncryptProp(propertyName)) {
String decryptValue;
try {
decryptValue = AES.Decrypt(propertyValue);
} catch (Exception e) {
return propertyValue;
}
return decryptValue;
} else {
return propertyValue;
}
}
private boolean isEncryptProp(String propertyName) {
for (String encryptName : encryptPropNames) {
if (encryptName.equals(propertyName)) {
return true;
}
}
return false;
}
}
数组encryptPropNames里面的值就是你jdbc.properties 配置文件里面 的名称。
AES.Decrypt(propertyValue); 这个方法是调用AES的加密方法。
public class AES{
//AES加密的16位key
private static String sKey = "1234567887654321";
public static void main(String[] args) throws Exception {
System.out.println(AHEEHES.Encrypt(""));
System.out.println(AHEEHES.Decrypt(""));
}
// 加密
public static String Encrypt(String sSrc) throws Exception {
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
// 8866952612241802
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"
IvParameterSpec iv = new IvParameterSpec("9876543223456789".getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());
return org.apache.commons.codec.binary.Base64.encodeBase64String(encrypted);// 此处使用BAES64做转码功能,同时能起到2次加密的作用。
}
// 解密
public static String Decrypt(String sSrc) throws Exception {
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec("9876543223456789".getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = org.apache.commons.codec.binary.Base64.decodeBase64(sSrc);// 先用bAES64解密
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
}
Key的长度必须是16,24,32位 , 这里用的是AES-128-CBC加密模式 , key需要16
使用AES加密需要的pom坐
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
使用AES加密配置文件相关推荐
- java实现双向RSA + AES加密
本文主要讲解在APP上如何实现双向RSA + AES加密. 先上一张主要流程图: 场景预设: 由于客户端是APP而不是网页,APP在第一次加载的时候会生成一对RSA秘钥对(我们称它为APP公钥私钥,不 ...
- cryptojs php 互通_关于PHP7和CryptoJS的AES加密方式互通
对于PHP7与CryptoJS的AES加密的方式互通代码不能正确执行,我的测试代码为: JS端:let iv = CryptoJS.enc.Utf8.parse('1111111111111111') ...
- 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!
前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...
- AES加密时抛出java.security.InvalidKeyException:#160;Illegal#160;key#160;size#160;or#160;def...
原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def 使用AES加密时,当密钥大于128时,代码会抛出 java. ...
- AES加密_ js与C#互通
为什么80%的码农都做不了架构师?>>> javascript部分 npm install crypto-js --save 定义文件jm.js const CryptoJS = r ...
- cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...
介绍 crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法.有时候项目涉及到的敏感数据比较多,为 ...
- aes加密内容不定长_浅谈加密技术
1.加密算法术语 假设我们将ABCD中的每个字母替换为其后的第二个字母,例如A替换为C,最终ABCD替换为CDEF. 明 文:ABCD 加密算法:字母替换 密 钥:每个字母替换为其后的第二 ...
- java php aes加密解密_php aes 加密解密可与java对接
php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...
- 记一次Python与C#的AES加密对接
前言 这几天做自动化测试的同事找到我,说是帮她看看有个AES加密的问题要怎么处理. 大概就是文档中贴了一段C#的AES加密代码,然后她要翻译成python的版本,去做一些测试相关的工作. 在我印象中, ...
最新文章
- 蜘蛛搜索引擎_各大搜索引擎的蜘蛛特点
- 45 jQuery中的常用API
- 160个Crackme025之巧去Neg
- android 功能防抖,一款简单的消息防抖框架
- Elastic-Job重要概念
- 【计算机图形学】实验:C#.net环境下采用GDI+图形特技处理案例教程
- android系统性能优化(61)---如何降低Android应用程序的耗电量
- 详解串行通信协议及其FPGA实现
- freemarker 使用简单笔记
- Android做一个WiFi信号测试,Android开发——WiFi信号检测
- http协议与tcp协议区别
- Linux性能优化之 CPU 篇
- 计算机怎么进入待机模式,电脑怎么进入待机模式
- Windows子系统WSL
- 手机翻书效果html,移动端实现翻书效果
- 镭速联合Azure Blob 存储,重塑大文件传输平台存储架构
- 老式马桶水封不足的唯一解决方案
- google、bing ,baidu 等搜索引擎 查询参数
- sql注入bypass方法
- MPLAB IDE使用经验