1.加密算法

package cn.sh.ideal.encryption;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;/*** @FileName: SymmetricEncoder* @Author Steven* @Date: 2020/8/31*/
public class SymmetricEncoder {/*** 加密* 1.构造密钥生成器* 2.根据ecnodeRules规则初始化密钥生成器* 3.产生密钥* 4.创建和初始化密码器* 5.内容加密* 6.返回字符串*/public static String AESEncode(String content) {try {// 初始化算法,设置成“SHA1PRNG”是为了防止在linux环境下随机生成算法SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed("xxx".getBytes("utf-8"));//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen = KeyGenerator.getInstance("AES");//2.根据ecnodeRules规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组keygen.init(128, secureRandom);//3.产生原始对称密钥SecretKey original_key = keygen.generateKey();//4.获得原始对称密钥的字节数组byte[] raw = original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key = new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher = Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEYtry {cipher.init(Cipher.ENCRYPT_MODE, key);} catch (InvalidKeyException e) {e.printStackTrace();}//8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码byte[] byte_encode = content.getBytes("utf-8");//9.根据密码器的初始化方式--加密:将数据加密byte[] byte_AES = cipher.doFinal(byte_encode);//10.将加密后的数据转换为字符串//这里用Base64Encoder中会找不到包//解决办法://在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。String AES_encode = new String(new BASE64Encoder().encode(byte_AES));//11.将字符串返回return AES_encode;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}//如果有错就返加nulllreturn null;}/*** 解密* 解密过程:* 1.同加密1-4步* 2.将加密后的字符串反纺成byte[]数组* 3.将加密内容解密*/public static String AESDncode(String content) {try {// 初始化算法,设置成“SHA1PRNG”是为了防止在linux环境下随机生成算法SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed("xxx".getBytes("utf-8"));//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen = KeyGenerator.getInstance("AES");//2.根据ecnodeRules规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组keygen.init(128, secureRandom);//3.产生原始对称密钥SecretKey original_key = keygen.generateKey();//4.获得原始对称密钥的字节数组byte[] raw = original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key = new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher = Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEYcipher.init(Cipher.DECRYPT_MODE, key);//8.将加密并编码后的内容解码成字节数组byte[] byte_content = new BASE64Decoder().decodeBuffer(content);/** 解密*/byte[] byte_decode = cipher.doFinal(byte_content);String AES_decode = new String(byte_decode, "utf-8");return AES_decode;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}//如果有错就返加nulllreturn null;}
}

2.数据库配置文件:datasource.properties

#测试数据库加密信息
jdbc-driver=oracle.jdbc.driver.OracleDriver
jdbc-url=jdbc:oracle:thin:@xx.xx.xx.xx:1521:snbst1
jdbc-user=cxjh3AWAFmPmsCdKYyoiPQ==
jdbc-password=JhDsPPKPIKlJJJtDMJa9Ug==
jdbc-url=jdbc:oracle:thin:@10.173.32.151:1521:snbst1
jdbc-user=h53HW7f3z7gAG1qFcSJqZQ==
jdbc-password=XZRhnL0hqtC4fkHvypOIvg==

3.扫描配置文件解析propertie:EncryptPropertyPlaceholderConfigurer.java

package cn.sh.ideal.encryption;import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;import java.util.Properties;/*** @FileName: EncryptPropertyPlaceholderConfigurer* @Author Steven* @Date: 2020/8/31*/
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {private Logger log = Logger.getLogger(EncryptPropertyPlaceholderConfigurer.class);@Overrideprotected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess,Properties props) throws BeansException {// 将加密的username解密后塞到propsString userName1 = props.getProperty("jdbc-user");if (userName1 != null) {props.setProperty("jdbc-user", SymmetricEncoder.AESDncode(userName1));}String password1 = props.getProperty("jdbc-password");if (password1 != null) {props.setProperty("jdbc-password", SymmetricEncoder.AESDncode(password1));}String userName2 = props.getProperty("jdbc-user1");if (userName2 != null) {props.setProperty("jdbc-user1", SymmetricEncoder.AESDncode(userName2));}String password2 = props.getProperty("jdbc-password1");if (password1 != null) {props.setProperty("jdbc-password1", SymmetricEncoder.AESDncode(password2));}super.processProperties(beanFactoryToProcess, props);}}

4.base-config.xml

<!--1.将bean注入spring容器中--><bean id="propertyConfigurer"         class="cn.sh.ideal.encryption.EncryptPropertyPlaceholderConfigurer"><property name="locations"><list>             <value>classpath:cn/sh/ideal/encryption/jdbc.properties</value></list></property></bean><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc-driver}"/><property name="url" value="${jdbc-url}"/><property name="username" value="${jdbc-user}"/><property name="password" value="${jdbc-password}"/></bean>

encryption数据库配置信息用户名密码加密相关推荐

  1. Springboot 从数据库读取数据库配置信息,动态切换多数据源 最详细实战教程

    以前写过一篇教程,Springboot AOP方式切换多数据源(主从两库类似情况使用最佳): https://blog.csdn.net/qq_35387940/article/details/100 ...

  2. oracle 11g 数据库cmd修改用户名密码及创建用户

    oracle 11g 数据库cmd修改用户名密码及创建用户 1. 数据库oracle 11g cmd命令修改用户名和密码 1.1. 前言 1.2. cmd窗口登录oracle 1.3. 更改syste ...

  3. RSA加密web前端用户名密码加密传输至后台并解密

    RSA加密web前端用户名密码加密传输至后台并解密 编写加解密公共方法类RSAUtils import org.apache.commons.codec.binary.Base64; import j ...

  4. 青橙商城13 用户名密码加密、用户注册+验证码

    1.用户名密码加密 2.用户注册+验证码 首先定义一个输入手机然后就返回验证码给你: 然后定义控制层调用上面的接口: 添加用户: 就是用户注册时,点击手机注册, 会输入手机,然后发送验证码,那么我们就 ...

  5. python模拟登录密码加密_有关爬虫模拟登陆时,处理用户名密码加密问题的方法...

    之前爬一家网站的数据,需要登陆之后才能进行:所以当时使用selenium偷鸡了一波: 现在我想尝试用requests方法,结果在登录时,就遇到了用户名密码加密问题 查了下登陆有关的js,找到了加密的方 ...

  6. jdbc mysql 解密_数据库配置文件jdbc.properties 实现用户名密码加密

    项目框架:spring 我们在开发应用时,需要连接数据库,一般把数据库信息放在一个属性配置文件中,比如jdbc.properties,具体的内容 jdbc.properties配置文件 jdbc.ur ...

  7. java web项目中对数据库用户名密码加密的一种解决方案

    原文路径:https://blog.csdn.net/u010463032/article/details/7900906 我们使用的项目经常是这个样子的: <bean id="dat ...

  8. BCrypt加密怎么存入数据库_Spring Boot 中密码加密的两种姿势

    1.为什么要加密 2.加密方案 3.实践3.1 codec 加密3.2 BCryptPasswordEncoder 加密 4.源码浅析 先说一句:密码是无法解密的.大家也不要再问松哥微人事项目中的密码 ...

  9. java对用户名密码加密_Spring security实现对账户进行加密

    一.原理分析1.1加密原理 首先前端页面发送注册的账户信息到controller层,然后依次经过service层和dao层,最后入库.其中对密码的加密应该放在service层进行,加密后再入库. sp ...

最新文章

  1. 为什么基类的析构函数要声明成虚函数
  2. 彻底理解 Spring 容器和应用上下文
  3. 【XAudio2】8.怎么播放音效
  4. S/4HANA for Customer Management里的搜索分页处理 1
  5. unity3d collider自动调整大小_Maya模型在Unity3d中的快速烘焙【2020】
  6. oracle clearing,ORACLE DBA常用命令集锦(2)
  7. PHP无限极分类生成树方法,无限分级
  8. 使用WindowsAPI创建txt文件
  9. js获取html元素并且修改属性,JavaScript中获取和修改元素属性的值
  10. ASP.NET MVC中的安全性
  11. eslint 规则中文注释
  12. es6html模板,js 字符串模板 ES6
  13. linux下i2c驱动笔记
  14. CSS属性之position
  15. 学习编程之前应该先学习哪些基础?
  16. JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件
  17. python画线段代码_python画线代码
  18. 常规的Git管理流程
  19. DVD-ROM区域码巧破解[转]
  20. python isinstance得用法记录

热门文章

  1. Python连接SQL Server数据库 - pymssql使用基础
  2. odyssey react鉴定_Nike Odyssey React SHLD开箱测评 Nike Odyssey React SHLD实物欣赏
  3. #打开cmd指定路径_CMD
  4. python查询mysql表名字动态日期_Python之路day11作业-MySQL表查询
  5. 北京林大计算机科技应为abc哪类,北京林业大学新生入学要准备什么?
  6. java 映射类_将数据库类型映射到具体的Java类
  7. 用计算机器提高正确率,计算机作业,正确率要90%
  8. 在WPS中提取出的照片在哪找_WPS技巧 | 找不到合适的配图?教你一招搞定
  9. if python 判断函数返回值_Python函数的返回值和作用域
  10. PHP 拓展 开发,开发php扩展