时间:2021-05-19
说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP、端口、用户名、密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞
系统架构:spring+mvc(Oracle是用jdbc自己封装的接口)
原xml配置
<?xml version="1.0" encoding="utf-8"?><beans xmlns="http://mons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import java.security.Key;import java.security.SecureRandom;/** * 加密生成token的方法 * * @author: Geoff * @create: 2020-12-30 17:03 **/public class Encryption { // 算法名称 public static final String KEY_ALGORITHM = "DES"; // 算法名称/加密模式/填充方式 // DES共有四种工作模式-->>ECB:电子密码本模式、CBC:加密分组链接模式、CFB:加密反馈模式、OFB:输出反馈模式 public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding"; /** * 生成密钥key对象 * * @param * @return 密钥对象 * @throws Exception */ private static SecretKey keyGenerator(String keyStr) throws Exception { byte[] input = HexString2Bytes(keyStr); DESKeySpec desKey = new DESKeySpec(input); // 创建一个密匙工厂,然后用它把DESKeySpec转换成 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM); SecretKey securekey = keyFactory.generateSecret(desKey); return securekey; } /** * 从十六进制字符串到字节数组转换 */ public static byte[] HexString2Bytes(String hexStr) { byte[] keyBytes = hexStr.getBytes(); if (keyBytes.length == 16) { byte[] tmpKey = new byte[24]; System.arraycopy(keyBytes, 0, tmpKey, 0, 16); System.arraycopy(keyBytes, 0, tmpKey, 16, 8); keyBytes = tmpKey; } return keyBytes; } /** * 加密数据 * * @param data 待加密数据 * @param key 密钥 * @return 加密后的数据 */ public static String encrypt(String data, String key) throws Exception { Key deskey = keyGenerator(key); // 实例化Cipher对象,它用于完成实际的加密操作 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); SecureRandom random = new SecureRandom(); // 初始化Cipher对象,设置为加密模式 cipher.init(Cipher.ENCRYPT_MODE, deskey, random); byte[] results = cipher.doFinal(data.getBytes()); // 执行加密操作。加密后的结果通常都会用Base64编码进行传输 return Base64.encodeBase64String(results); } /** * 解密数据 * * @param data 待解密数据 * @param key 密钥 * @return 解密后的数据 */ public static String decrypt(String data, String key) throws Exception { Key deskey = keyGenerator(key); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 初始化Cipher对象,设置为解密模式 cipher.init(Cipher.DECRYPT_MODE, deskey); // 执行解密操作 return new String(cipher.doFinal(Base64.decodeBase64(data))); }}到此这篇关于spring*.xml配置文件明文加密的实现的文章就介绍到这了,更多相关spring*.xml配置文件加密内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了Spring加载加密的配置文件,供大家参考,具体内容如下一、继承并实现自己的属性文件配置器类/***带加密的Spring属性配置文件扩展类*
基于Annotation的声明式在Spring中,尽管使用XML配置文件可以实现AOP开发,但是如果所有的相关的配置都集中在配置文件中,势必会导致XML配置文件
一.spring配置文件:application.xml
一.spring配置文件:application.xml
一、通过context:property-placeholder标签实现配置文件加载1、用法示例:在spring.xml配置文件中添加标签复制代码代码如下:2、