Spring 对属性文件的加密与解密
一般用于配置密码等敏感信息
解密/加密工具类
- package com.baobaotao.placeholder;
- import sun.misc.BASE64Decoder;
- import sun.misc.BASE64Encoder;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import java.security.Key;
- import java.security.SecureRandom;
- /**
- * 加密/解密工具类
- * Created by sherry on 15-6-28.
- */
- public class DESUtils {
- /*指定加密/解密使用的密匙*/
- private static Key key;
- /*注意:密匙必须是8的倍数*/
- private static String KEY_STR = "myKeykkk";
- static {
- try {
- /*防止Linux下随机生成key*/
- SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
- secureRandom.setSeed(KEY_STR.getBytes());
- KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
- //keyGenerator.init(new SecureRandom(KEY_STR.getBytes()));
- keyGenerator.init(secureRandom);
- key = keyGenerator.generateKey();
- keyGenerator = null;
- }catch (Exception e){
- throw new RuntimeException(e);
- }
- }
- /*对字符串进行DES加密,返回BASE64编码的加密字符串*/
- public static String getEncryptString(String string){
- BASE64Encoder base64Encoder = new BASE64Encoder();
- try {
- byte[] strBytes = string.getBytes("UTF-8");
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- byte[] encryptStrBytes = cipher.doFinal(strBytes);
- return base64Encoder.encode(encryptStrBytes);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- /*对BASE64编码的加密字符串进行解密,返回解密后的字符串*/
- public static String getDecryptString(String str){
- BASE64Decoder base64Decoder = new BASE64Decoder();
- try {
- byte[] strBytes = base64Decoder.decodeBuffer(str);
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.DECRYPT_MODE,key);
- byte[] decryptStrBytes = cipher.doFinal(strBytes);
- return new String(decryptStrBytes,"UTF-8");
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- public static void main(String[] args) {
- args = new String[]{"root","123456"};
- String[] result = new String[2];
- if (args == null||args.length<1){
- System.out.println("请输入要加密的字符串,用空格分割");
- }else {
- int i = 0;
- for (String arg:args){
- System.out.println(arg + ":" + getEncryptString(arg));
- result[i++] = getEncryptString(arg);
- }
- }
- for (String temp:result){
- System.out.println(temp+":"+getDecryptString(temp));
- }
- }
- }
属性编辑器
- package com.baobaotao.placeholder;
- import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
- /**
- * Created by sherry on 15-6-28.
- */
- public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
- private String[] encryptPropNames = {"username_mysql","password"};
- @Override
- protected String convertProperty(String propertyName, String propertyValue) {
- if (isEncryptProp(propertyName)){
- String decryptValue = DESUtils.getDecryptString(propertyValue);
- System.out.println("解密结果:"+decryptValue);
- return decryptValue;
- }else {
- System.out.println("无需解密:"+propertyValue);
- return propertyValue;
- }
- }
- /*判断是否是需要进行加密的属性*/
- public boolean isEncryptProp(String propertyName){
- for (String encryptpropertyName:encryptPropNames){
- if (encryptpropertyName.equals(propertyName)){
- return true;
- }
- }
- return false;
- }
- }
配置使用
- <bean class="com.baobaotao.placeholder.EncryptPropertyPlaceholderConfigurer"
- p:location="classpath:jdbc.properties"
- p:fileEncoding="UTF-8"/>
- <!--配置数据源-->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
- p:driverClassName="${driverClassName}"
- p:url="${url}"
- p:username="${username_mysql}"
- p:password="${password}"/>
Spring 对属性文件的加密与解密的更多相关文章
- Spring的属性文件properties使用注意
Spring的属性文件properties使用注意 Spring 中属性文件的配置 通常我们会使用properties文件来设置一些属性,如数据库连接信息,避免进行硬编码, <bean clas ...
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...
- Spring对外部属性文件指定的某个属性进行加密、解密
[From] http://blog.csdn.net/ethanq/article/details/7333897 在我们开发当中,经常会用到spring框架来读取属性文件的属性值,然后使用占位符引 ...
- Spring中属性文件properties的读取与使用
实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理.例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.propert ...
- Java实现文件的加密与解密
最近在做一个项目,需要将资源文件(包括图片.动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息.此策略的原因与好处是将准备好 ...
- Spring MVC 属性文件读取注入到静态字段
目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用 在项目中,有些参数需要配置到属性文件xxx.pr ...
- Spring配置属性文件
在项目开发阶段和交付阶段数据库的连接信息往往是不同的,可以把这些信息写成属性文件,再在Spring中导入即可引用 jdbc.properties属性文件如下: jdbc.driverClassName ...
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- Java使用基本JDK操作ZIP文件以及zip文件的加密、解密等功能
Java使用基本JDK操作ZIP文件 http://blog.csdn.net/zhyh1986/article/details/7723649 Java解压和压缩带密码的zip文件 http://b ...
随机推荐
- django Ajax介绍
1.Ajax技术 认识ajax之前必须先了解json模块,json(Javascript Obiect Notation,JS对象标记)属于一种轻量级的数据交换格式 json的格式来源于js的格式 ...
- Java学习过程中的收获
1. String <--> Date 这种转换要用到java.text.SimpleDateFormat类 字符串转换成日期类型: 方法1: 也是最简单的方法 Date date=new ...
- 在Linux上部署Kettle环境
首先我们有一个正常安装的,桌面版的Linux. Kettle的应用程序是Linux版本与Windows版本在同一个文件夹下共存的,所以可以直接把本机上的Kettle解压,通过FTP工具上传到Linux ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...
- Java - 关于基础数据类型的形参和返回值
1. 当基础数据类型被当作形参时,最好使用其包装类,因为这样可方便调用者传参(基础数据类型亦或是其包装类都可) 2. 当基础数据类型被当作返回值时,最好使用原型,因为这样可以方便调用者接收返回值( ...
- Percona-Tookit工具包之pt-mext
Preface We are always obliged to analyze many outputs generated by various tools directly ev ...
- JDK1.8简单配置环境变量---两步曲
鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...
- DNS的主从,转发与负载功能
接着原来<DNS原理与应用>的文章,本章内容主要通过实现DNS的主从,转发,及基于域名解析不同的ip实现后端服务负载均衡的效果.最后再实现DNS的高级功能:类似CDN原理实现基于IP实现区 ...
- ubuntu16 升级pip3后报错File "/usr/bin/pip3", line 9, in <module> from pip import main ImportError: cannot import name 'main'
问题:ubuntu16 执行pip3 install --upgrade pip之后,pip3执行出错. Traceback (most recent call last): File "/ ...
- pc和移动端页面字体设置
移动端项目:font-family:Tahoma,Arial,Roboto,”Droid Sans”,”Helvetica Neue”,”Droid Sans Fallback”,”Heiti SC” ...