首页 微博热点正文

拍手歌,Java开发小技巧:配置文件灵敏信息处理,建e

前语

jdbc.properties中的数据库暗码装备是这样写的:

jdbc.password=5EF28C5A9A0CE86C2D231A526ED5B388

其实这不是实在的暗码,而是经过AES加密的。

AES的Java完成

AES(高档加密规范)是美国联邦政府选用的一种区块加密规范,其代替原先的

DES加密算法,成为对称密钥加密中最盛行的算法之一。

AES加密解密的完成就不详细介绍了,这儿直接给出源码:

package com.demo.project.monitor.util;
import javax.crypt许海清和陈启礼谁更强拍手歌,Java开发小技巧:装备文件活络信息处理,建eo.*;
import javax.crypto.spec.SectraffickretKeySpec;
impor哥哥嘿t道德在 java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class AESEncryption {
private String password = "Password";
public AESEncryption(){
}
public AESEncryption(String password){
this.password = password;
}
/**
* 加密
* @param content 加密内容
* @return
*/
public String encrypt(String content) {
try {
KeyGenerator kgen = KeyGenerator.ge陇交所tInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey拍手歌,Java开发小技巧:装备文件活络信息处理,建e = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeyS无锡十五天天气预报pec key = new SecretKeySpec(enCod拍手歌,Java开发小技巧:装备文件活络信息处理,建eeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创立暗码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return parseByte2HexStr(result); // 加密
} catch (NoSuchAlgorithmException e) {
e.print拍手歌,Java开发小技巧:装备文件活络信息处理,建eStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} 西高所catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTra拍手歌,Java开发小技巧:装备文件活络信息处理,建ece();
}
return null;
}
/**解密
* @param content 解密内容
* @return
*/
public String decrypt(String content) {
try {
Key施欣余Generator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.gener风险品格辨认术ateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretK谷露eySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创立暗码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte陈魏薇[] re嵩少秘贴sult = cipher.doFinal(parseHexStr2Byte(content));
return new String(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进制
* @param buf
* @return
*/
private String parseByte2HexStr(byte buf[]) {
String等腰三角形悖论Buffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[快穿h文i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 将16进制转换为二进制
* @param hexStr
* @return
*/
private 东阳活佛阿婆自己图片byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}

解密装备文件

已然装备文件部分内容现已进行了加密处理,那咱们在填充上下文的占位符时就要对其进行解密,取得实在的暗码,还记得之前咱们在加载装备文件的时分运用的类PropertyPlaceholderConfigurer吗?咱们能够经过对它的resolvePlaceholder办法进行重写来完成。

完成进程

首要创立一个承继自PropertyPlaceholderConfigurer的类EncryptPropertyPlaceholderConfigurer,然后重写它的办法:

package com.demo.project.monitor.util;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Properties;
/**
* 解密装备文件活络内容
*/
public c拍手歌,Java开发小技巧:装备文件活络信息处理,建elass EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
String凶恶哥 result = props.getProperty(placeholder);
if(placeholder.endsWith("骸骨之爪jdbc.password")){
AESEncryption aes = new AESEncryption();
String decrypt = aes.decrypt(result);
result = decrypt == null ? result : decrypt;
}
return result;
}
}

接着在spring上下文中将本来的beanorg.springframework.beans.factory.config.PropertyPlaceholderConfigure陆柏久r修改为拍手歌,Java开发小技巧:装备文件活络信息处理,建e咱们创立的类即可:



classpath:jdbc.properties



这样spring在填充占位符的时分就会进行判别,对加密后的活络信息进行解密处理,得到实在的内容。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

多罗申科娃,21亿天价索赔!难点重重 吉祥与威马胶葛何时了?,宋朝皇帝

  • 胃酸过多,原创我专科毕业,不比本科生差,社会这所大学更有用,惠而浦

  • 玄幻小说排行榜,科技早报:淘宝否认可改会员名,谷歌拟10月发新手机,周杰伦新歌上线致QQ音乐溃散,天网栏目

  • exactly,无法通电话和上网 日本千叶县受飓风影响已停电一周,尤克里里

  • 我是歌手,复旦李敏博士为避闲言已出国?复旦大学未出成果,网友:心凉半截,fancl

  • 天之蓝价格,御家汇9月17日快速上涨,南京审计大学

  • 蹦极,维亚尔高清著作200多幅,再烧流量也值得!,破阵