考虑到数据库连接密码直接配置在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加密配置文件相关推荐

  1. java实现双向RSA + AES加密

    本文主要讲解在APP上如何实现双向RSA + AES加密. 先上一张主要流程图: 场景预设: 由于客户端是APP而不是网页,APP在第一次加载的时候会生成一对RSA秘钥对(我们称它为APP公钥私钥,不 ...

  2. cryptojs php 互通_关于PHP7和CryptoJS的AES加密方式互通

    对于PHP7与CryptoJS的AES加密的方式互通代码不能正确执行,我的测试代码为: JS端:let iv = CryptoJS.enc.Utf8.parse('1111111111111111') ...

  3. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  4. 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. ...

  5. AES加密_ js与C#互通

    为什么80%的码农都做不了架构师?>>> javascript部分 npm install crypto-js --save 定义文件jm.js const CryptoJS = r ...

  6. cryptojs aes加密每次结果不同_Javascript加密算法标准库,支持Nodejs+浏览器——crypto-js...

    介绍 crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法.有时候项目涉及到的敏感数据比较多,为 ...

  7. aes加密内容不定长_浅谈加密技术

    1.加密算法术语 假设我们将ABCD中的每个字母替换为其后的第二个字母,例如A替换为C,最终ABCD替换为CDEF. 明    文:ABCD 加密算法:字母替换 密    钥:每个字母替换为其后的第二 ...

  8. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  9. 记一次Python与C#的AES加密对接

    前言 这几天做自动化测试的同事找到我,说是帮她看看有个AES加密的问题要怎么处理. 大概就是文档中贴了一段C#的AES加密代码,然后她要翻译成python的版本,去做一些测试相关的工作. 在我印象中, ...

最新文章

  1. 蜘蛛搜索引擎_各大搜索引擎的蜘蛛特点
  2. 45 jQuery中的常用API
  3. 160个Crackme025之巧去Neg
  4. android 功能防抖,一款简单的消息防抖框架
  5. Elastic-Job重要概念
  6. 【计算机图形学】实验:C#.net环境下采用GDI+图形特技处理案例教程
  7. android系统性能优化(61)---如何降低Android应用程序的耗电量
  8. 详解串行通信协议及其FPGA实现
  9. freemarker 使用简单笔记
  10. Android做一个WiFi信号测试,Android开发——WiFi信号检测
  11. http协议与tcp协议区别
  12. Linux性能优化之 CPU 篇
  13. 计算机怎么进入待机模式,电脑怎么进入待机模式
  14. Windows子系统WSL
  15. 手机翻书效果html,移动端实现翻书效果
  16. 镭速联合Azure Blob 存储,重塑大文件传输平台存储架构
  17. 老式马桶水封不足的唯一解决方案
  18. google、bing ,baidu 等搜索引擎 查询参数
  19. sql注入bypass方法
  20. MPLAB IDE使用经验

热门文章

  1. 左连接,右连接,内连接及全连接区别
  2. 电压有效值电容和电感的电压电流相位关系以及电抗和容抗值推导
  3. (7)无参构造方法 有参构造方法
  4. 你需要了解的 http 协议基础知识
  5. handlebars学习总结
  6. linux 启动 grub 修复工具,当Ubuntu无法启动时,如何修复GRUB2?
  7. node如何使用mongoose?
  8. Windows安装程序遇到错误:0x80240037
  9. Idea创建一个java项目
  10. 红米android10参数,红米10x5g手机参数 红米10x5g手机参数有哪些