使用Jasypt对数据库配置文件进行加密

在Spring配置文件中常使用占位符(placeholder )来加载资源文件,常常一些资源文件都是已明文形式存放的,比如jdbc配置信息等,从系统安全角度来说,这些信息已明文形式显示总是不好。今天接触Jasypt,查了一些资料学习了下。Jasypt是sourceforge.net上的一个开源项目,是一个Java库。更多介绍自行google吧。

第一步,加入Jasypt依赖。这里我们使用maven。

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.8</version>
</dependency>

加密:

@Test
public void encrypt() {
    // 创建加密器
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    // 配置
    EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
    config.setAlgorithm("PBEWithMD5AndDES");// 加密算法
    config.setPassword("fuyung");// 系统属性值
    encryptor.setConfig(config);

    String plaintext = "root"; //明文
    String ciphertext = encryptor.encrypt(plaintext); // 加密
    System.out.println(plaintext + " : " + ciphertext);// 运行结果:root : 8y9G4kIZQuCHB78mMJNkHw==
}

解密:

@Test
public void decrypt() {
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
    config.setPassword("fuyung");
    encryptor.setConfig(config);
    String ciphertext = "8y9G4kIZQuCHB78mMJNkHw==";// 密文

    //解密
    String plaintext = encryptor.decrypt(ciphertext); // 解密
    System.out.println(ciphertext + " : " + plaintext);// 运行结果:8y9G4kIZQuCHB78mMJNkHw== : root
}

与Spring集成。在Spring的配置文件里面加入如下代码:

<bean id="propertyConfigure"
      class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
    <constructor-arg ref="configurationEncryptor"/>

    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:jdbc.properties</value>
        </list>
    </property>
</bean>
<bean id="configurationEncryptor"
      class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
    <property name="config" ref="environmentVariablesConfiguration"/>
</bean>

<bean id="environmentVariablesConfiguration"
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES"/>
    <property name="password" value="clm"/>
</bean>

在看一下jdbc.properties文件:

jdbc.username=ENC(kpKWmxAX2LMUqqkKPCulpTimxznTDxXw)jdbc.password=ENC(Wg/U1YMQOznH4WyP7HpTTJL0v1KGFLIC)

记得在你的密文前加上ENC前缀,并用()包起来。为什么要这样写,查看源码便知:

这样子在启动Spring容器的时候就会读取到加密的值就会自动进行解密了。

时间: 2024-08-22 15:20:27

使用Jasypt对数据库配置文件进行加密的相关文章

druid-1.0.13 数据库配置文件密码加密

1.cmd 切换到druid目录  我的是C:\tool\apache-tomcat-7.0.67\webapps\projectA\WEB-INF\lib 2.运行命令 java -cp druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools 密码 确定后会输出密码 3.配置数据源XML文件 <bean id="dataSource_sqlserver" class="com.alibaba.druid

使用Jasypt对SpringBoot配置文件加密

# **前言** 在日前安全形势越来越严重的情况下,让我意识到在项目中存在一个我们经常忽略的漏洞,那就是我们的项目的配置文件中配置信息的安全,尤其是数据库连接的用户名和密码的安全.所以这里我们就需要对数据库的用户名和密码进行加密,这也是本文的由来.本文采用Jasypt对Spring Boot配置文件加密的相关方法,其实呢,也还有其他方案,具体的会在后面的相关文章中说明. # **引入jasypt** ```xml com.github.ulisesbocchio jasypt-spring-bo

Springboot配置文件内容加密

使用的是jasypt-spring-boot-starter,具体介绍可以参考 https://gitee.com/yangziyi2017/Jasypt-Spring-Boot 引入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0&

Spring利用propertyConfigurer类 读取.property数据库配置文件

1.Spring的框架中,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类可以将.properties(key/value形式)文件中 一些动态设定的值(value),在XML中替换为占位该键($key$)的值, .properties文件可以根据客户需求,自定义一些相关的参数,这样的设计可提供程序的灵活性. 2.在Spring中,使用PropertyPlaceholderConfigurer可以在XM

NET Framework 4.5新特性 (一) 数据库的连接加密保护。

NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本.  一旦使用这类操作,文本加密是私有不能共享的,并在不再需要时从计算机内存中删除.  SecureString此类不能被继承. 下面做了一些演示 private void Login_Click(object sender, EventArgs e) { //登录参数 string userName = Username.Text; SecureString password = se

db.properties 数据库配置文件

project.pool.initialPoolSize = 10 project.pool.minPoolSize = 10 project.pool.maxPoolSize = 25 project.db.tablePrefix = sjjy project.jdbc.driver = oracle.jdbc.driver.OracleDriver #project.jdbc.url = jdbc:oracle:thin:@${project.dbServer}:1521:${dbSid}

表单 对数据库字段自动加密解密表单提交(THINKPHP3.2)

1.config配置变量 'MODEL_FIELD_FLAG' => TRUE,//表单加密开关 'MODEL_FIELD_NAME_PRE' => 'mlm_',//表单加密前缀 'MODEL_FIELD_EMCODE' => 'md5',//加密方式 'MODEL_FIELD_EMCODE_KEY' => '[email protected]'//加密key 2.控制器层 $model  继承基础类 BaseModel BaseRelationModel 任意一个的自定义模型

winform 配置文件的加密解密

winform 配置文件的加密解密Visual Studio 命令提示(2010) 窗口下直接输入 :解密aspnet_regiis -pdf connectionStrings 程序文件夹全目录 加密aspnet_regiis -pef connectionStrings 程序文件夹全目录 注意:加密解密过程中必须把配置文件名称改为web.config程序运行一定要改回来App.cong 也可以通过运行CMD切换到命令提示符下,进入到C:\WINDOWS\Microsoft.net\Frame

SQLite数据库--C#访问加密的SQLite数据库

前提:一个项目需要存储各种密码数据,使用的嵌入式的SQLite数据库.默认的SQLite数据库是没有加密的,这样相当不安全.找呀找呀找方法... 方法: 1.使用SQLite管理器加密. 部分SQLite管理器是有对SQLite数据库有加密功能的.本小菜使用的是:SQLite Developer管理工具.加密如下:        密码就设置OK了. 2.C#访问SQLite带密码的数据库 首先说说,不带密码的SQLite访问字符串格式,只需写入数据库所在路径即可: string ConnStr=