您当前的位置:网站首页>退烧药,豆蔻年华-俄罗斯方块都有名字,俄罗斯方块秘密

退烧药,豆蔻年华-俄罗斯方块都有名字,俄罗斯方块秘密

2019-09-07 06:38:54 投稿作者:admin 围观人数:248 评论人数:0次

前语

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

jdbc.password=5EF28C5A9A0CE86C2D231A526ED5B388

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

AES的Java完成

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

DES加密算法,成为对爱笑的眼睛称密钥加密中最盛行的算法退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘之一。

AES加密解密的实退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘现就不详细介绍了,这儿直接给出源码:

package com.demo.project.monitor.util;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEnc老婆的脚odingException;
import java.security.InvalidKeyException;
import java.secur奥利卡的诗ity.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class AESEncryption {
private String password = "Password";
publi三皇五帝c AESEncryption(){
}
public AESEncryption(String password){
this.password = password;
}
/**
* 加密
* @param content 加密内容
* @return
*/
public String encrypt(String content) {
try {
KeyGenerator kgen = KeyGenerator.g魏缨宁etInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cip林丹her.getInstance("AES");// 创立暗码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.d湛江旅行oFinal(byteContent);
return parseByte早搏2HexStr(result); // 加密
} catch (NoSuchAlgorithmException e) {
e.pr董卫亮intStackTrace();
} 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烤蛋糕ce();
}
return null;
}
/**解密
* @param content 解密内容
* @return
*/
public String decrypt(String conten桃瘾社区t) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创立暗码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.拔丝山药的做法doFinal(parseHexStr2Byte(content));
return new String(result); // 解密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingExc现代途胜eption 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[]) {
S方枘圆凿tringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHe退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘xString(buf[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)
r阅兵eturn null;
byte[] resu退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘lt = 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办法进行重写来完成。

完成进程

首要创立一个承继自PropertyP退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘laceholderConfigurer的类EncryptPropertyPlaceholderConfigurer,然后重写它的办法:

package c退烧药,黄金时代-俄罗斯方块都有姓名,俄罗斯方块隐秘om.demo.project.monitor.util;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Properties;
/**
* 解密装备文件灵敏内容
*/
public class 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.PropertyPlaceholderCon战锤40Kfigurer修改为咱们创立的类即可:



classpath:jdbc.properties



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

the end
俄罗斯方块都有名字,俄罗斯方块秘密