一般用于配置密码等敏感信息

解密/加密工具类

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 对属性文件的加密与解密的更多相关文章

  1. Spring的属性文件properties使用注意

    Spring的属性文件properties使用注意 Spring 中属性文件的配置 通常我们会使用properties文件来设置一些属性,如数据库连接信息,避免进行硬编码, <bean clas ...

  2. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  3. Spring对外部属性文件指定的某个属性进行加密、解密

    [From] http://blog.csdn.net/ethanq/article/details/7333897 在我们开发当中,经常会用到spring框架来读取属性文件的属性值,然后使用占位符引 ...

  4. Spring中属性文件properties的读取与使用

    实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理.例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.propert ...

  5. Java实现文件的加密与解密

    最近在做一个项目,需要将资源文件(包括图片.动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息.此策略的原因与好处是将准备好 ...

  6. Spring MVC 属性文件读取注入到静态字段

    目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用   在项目中,有些参数需要配置到属性文件xxx.pr ...

  7. Spring配置属性文件

    在项目开发阶段和交付阶段数据库的连接信息往往是不同的,可以把这些信息写成属性文件,再在Spring中导入即可引用 jdbc.properties属性文件如下: jdbc.driverClassName ...

  8. Spring Boot属性文件配置文档(全部)

    This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...

  9. Java使用基本JDK操作ZIP文件以及zip文件的加密、解密等功能

    Java使用基本JDK操作ZIP文件 http://blog.csdn.net/zhyh1986/article/details/7723649 Java解压和压缩带密码的zip文件 http://b ...

随机推荐

  1. java 基础词汇 必须 第九天

    Collection 集合 List 列表集合 Set 不重复集合 Linked 链表 Vector 线程安全集合 Hash 哈希值 tree 树型结构 Map 键值对集合 add 增加 remove ...

  2. Chrome 调试工具的一些高阶功能

    Chrome 内置抓包工具 Block requests 截取长图 代码的覆盖率分析 Make site better Chrome 内置抓包工具 在浏览器地址栏输入chrome://net-inte ...

  3. AwesomeMenu,仿Path主菜单效果

    项目主页: AwesomeMenu 项目主页 实例下载: 最新源代码点击下载 用法简介: 通过创建菜单各个单元项来创建菜单: UIImage *storyMenuItemImage = [UIImag ...

  4. 使用泛型实现对int数组或者String数组进行排序

    因为是使用的泛型,我们并不确定数据类型, 对于数据的比较就不能用平时的大于或者小于. 我们需要比较对象实现Comparable接口,该接口下的compareTo()方法可以用来比大小 定义Sort类: ...

  5. LeetCode47.Permutations II(剑指offer38-1)

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  6. PHP实现的一个时间帮助类

    背景 工作的过程中经常会遇到各种时间类的操作,因此封装了一个帮助工具类,提高代码的复用率 主要功能 根据相差的天数获取连续的时间段 /** * 根据相差的天数获取所有连续的时间段 * @param $ ...

  7. HAN模型理解2

    Hierarchical Attention Networks for Document Classification 论文的理解 在论文的摘要中,它提出了论文的两个特点.第一个就是对应文章所有具有的 ...

  8. MySQL的备份

    MySQL的备份 开启MySQL的log_bin 执行查看mysql的log_bin状态 > show variables like 'log_bin%'; +----------------- ...

  9. 浅谈UWB(超宽带)室内定位技术(转载)

    技术背景 随着无线通信技术的发展和数据处理能力的提高,基于位置的服务成为最有前途的互联网业务之一.无论移动在室内还是室外环境下,快速准确地获得移动终端的位置信息和提供位置服务的需求变得日益迫切.通信和 ...

  10. C语言进阶—— 逻辑运算符分析15

    印象中的逻辑运算符: ---学生:老师,在我的印象中,逻辑运算符用在条件判断的时候,真挺简单的,还有必要深究吗? ---老师:逻辑运算符确实在条件判断的时候用的比较多,但是并不能说简单... 请思考下 ...