`

如何在你的应用中使用Jasypt来保护你的数据库用户名和密码

阅读更多

“任何时候都不应该明文显示和存储密码”,我想这个原则是一个稍微有点安全常识的人都懂的,那么在Java应用中,如何最简单最方便地保护你的应用的数据呢?

本文我们以数据库的用户名和密码为例子,来讲解在APDPlat中我们如何使用开源项目Jasypt来实现加解密。

首先,我们引入依赖库,使用Maven方式如下:

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

其次,接下来我们看看如何加密:

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

/**
 *把密文放到配置文件中的时候要注意:
 * ENC(密文)
 * @author 杨尚川
 */
public class ConfigEncryptUtils {
    public static void main(String[] args){
        //加密工具
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        //加密配置
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
        //自己在用的时候更改此密码
        config.setPassword("apdplat");
        //应用配置
        encryptor.setConfig(config);
        String plaintext="root";
        //加密
        String ciphertext=encryptor.encrypt(plaintext);
        System.out.println(plaintext + " : " + ciphertext);
    }
}

运行输出结果如下:

    root : azL9Cyp9H62r3eUgZ+TESw==

再次,接下来我们看看如何解密:

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

/**
 *把密文放到配置文件中的时候要注意:
 * ENC(密文)
 * @author 杨尚川
 */
public class ConfigEncryptUtils {
    public static void main(String[] args){
        //加密工具
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        //加密配置
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
        //自己在用的时候更改此密码
        config.setPassword("apdplat");
        //应用配置
        encryptor.setConfig(config);
        String ciphertext="azL9Cyp9H62r3eUgZ+TESw==";
        //解密
        String plaintext=encryptor.decrypt(ciphertext);
        System.out.println(ciphertext + " : " + plaintext);
    }
}

运行输出结果如下:

   azL9Cyp9H62r3eUgZ+TESw== : root

从上面我们可以看到,加密和解密的代码的唯一差别是encrypt和decrypt。

最后我们来看看如何和spring集成,在spring配置文件中加入如下配置,这样当spring读取到的值是加过密的值就会自动解密,那么spring是如何判断一个值是否加密过了呢?是根据特定的前缀ENC(和后缀)来判断的。

<!-- Spring属性文件解密组件  -->
<bean id="propertyConfigurer" 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:/org/apdplat/config.properties</value>
            <value>classpath:config.local.properties</value>
            <value>classpath:/org/apdplat/db.properties</value>
            <value>classpath:db.local.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="apdplat" />
</bean>

配置好spring后,我们就可以在指定的配置文件classpath:config.local.properties中使用加密过后的数据库连接使用的用户名和密码了,别忘了特定的前缀ENC(和后缀)哦:

#数据库配置文件

#mysql
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/${module.short.name}?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true&autoReconnect=true
db.username=ENC(qPWWR8YEmQE63EYywEBKaQ==)
db.password=ENC(qPWWR8YEmQE63EYywEBKaQ==)
jpa.database=MYSQL
db.backup.command=mysqldump  -u${db.username} -p${db.password} ${module.short.name}
db.restore.command=mysql -u${db.username} -p${db.password} ${module.short.name}

 

 

 

 

 

 

 

 

 

 

 

3
1
分享到:
评论
1 楼 toknowme 2015-05-20  
等等在项目中尝试一下!

相关推荐

    数据库密码配置加密操作步骤.doc

    接下来,下载 Jasypt 的 jar 包文件,例如 jasypt-1.9.3.jar,然后在命令提示符 cmd 中生成需要加密的字符串(数据库用户名、密码)。命令如下: ```bash java -cp jasypt-1.9.3.jar org.jasypt.intf.cli....

    web应用数据库密码加密

    Spring Boot和Spring框架默认使用YAML或Properties文件来配置数据库连接信息,包括用户名和密码。为了保护这些敏感信息,我们可以使用密码加密技术。Spring Boot提供了`jasypt-spring-boot-starter`这个库,它允许...

    jasypt加密_spring整合.zip

    在Hibernate配置文件中,我们通常会涉及到数据库连接字符串、用户名和密码等敏感信息,这些信息非常适合使用Jasypt进行加密。 Spring框架是Java领域广泛使用的轻量级应用框架,它提供了一种声明式的方式来进行依赖...

    jasypt-1.7.1.jar.zip 下载

    - **数据库连接信息**:jasypt常用于加密数据库连接的用户名和密码,防止敏感信息泄露。 - **应用配置文件**:在分布式系统中,通过jasypt加密配置文件中的密钥,提高系统的安全性。 - **用户密码存储**:可以...

    Spring数据库连接等配置加密

    Spring框架作为Java领域最常用的轻量级框架,其配置文件中通常包含了数据库连接信息,如URL、用户名和密码等敏感数据。为了防止这些信息被非法获取,我们需要对它们进行加密处理。本文将详细探讨"Spring数据库连接等...

    spring-jdbc文件数据库配置加密

    在实际应用中,通常需要配置数据源(DataSource)来建立与数据库的连接,这些配置信息包括数据库URL、用户名和密码等敏感信息。 对于这些敏感信息,安全性是不可忽视的。配置加密就是一种确保这些信息不被未授权...

    基于Jasypt对SpringBoot配置文件加密

    其次,需要编写代码实现对特定字符串(如数据库用户名和密码)的加密。在示例代码中,创建了一个`BasicTextEncryptor`类的实例,并设置了加密所需的"password"(即盐值),然后调用`encrypt`方法进行加密。加密后的...

    spring中的数据源配置信息加密方案

    在Spring框架中,数据源(DataSource)是连接数据库的关键组件,通常包含敏感信息,如数据库URL、用户名和密码。为了确保这些信息的安全,我们需要对它们进行加密。本篇将详细介绍如何在Spring应用中实现数据源配置...

    SpringBoot配置文件中数据库密码加密两种方案(推荐)

    总结来说,Jasypt和Druid提供了两种不同的方法来保护SpringBoot配置文件中的数据库密码。Jasypt提供了一个通用的加密库,适用于各种属性的加密;而Druid的内置加密功能则专为数据库密码设计,简化了配置过程。根据...

    springboot+mybatis等测试项目

    这里特别提到了使用jasypt对数据库登录名和密码进行加密处理,jasypt是一个强大的加密库,可以保护敏感数据,如配置文件中的密码。将这些信息加密后,即使配置文件被泄露,攻击者也无法直接获取到明文密码,增加了...

    SqlserverMybatisConfig_java_

    描述中提到的"数据库连接加密配置"是指在应用程序中对数据库连接信息(如URL、用户名和密码)进行安全处理,通常会通过环境变量、配置文件加密或者使用安全工具来保护这些敏感信息。此外,"使用其他数据库连接池...

    java _pro 登录

    5. **数据库交互**:服务器通常会连接到数据库,查询是否存在匹配的用户名和密码。这涉及到JDBC(Java Database Connectivity)技术,包括加载数据库驱动、创建Connection、Statement或PreparedStatement对象,以及...

    jdbc.properties

    2. **配置文件加密**:考虑到安全性,密码等敏感信息不应明文写在配置文件中,可以使用Java的加密库如Jasypt来对这些信息进行加密。 3. **自动加载配置**:在Spring框架中,可以通过`@PropertySource`注解自动加载`...

    SSM整合demo

    数据库配置文件加密是为了保护敏感信息,如数据库用户名、密码等。这通常通过读取加密后的配置文件,然后在运行时解密来实现。Spring提供了一些库支持,如Jasypt,可以方便地对配置文件进行加密和解密。 在实际项目...

    login-module-master_java_源码.zip

    这通常涉及到用户输入的用户名和密码与数据库中存储的信息进行匹配。Java提供了多种认证框架,如Spring Security,它支持多种认证策略,如Basic Auth、Form-Based Auth等。 5. **会话管理**:成功登录后,系统通常...

    weblogic集群部署方案

    - 创建数据源对象,并设置其连接属性,如 JNDI 名称、连接 URL、用户名和密码等。 - 测试数据源以确保其正确配置。 ##### 2.4 部署应用程序 - **过程**: - 将应用程序部署到集群中。 - 确保应用程序能够在集群...

    spring,配置文件从属性文件读取JDBC连接的相关参数

    在Spring框架中,配置文件是核心组件之一,用于定义bean的生命周期、依赖关系以及各种应用配置。...在实际开发中,还应考虑使用像`jasypt`这样的加密库来加密存储这些敏感数据,进一步提高安全性。

    java高仿qq聊天

    在本项目中,开发者可能使用了Java的Swing或JavaFX库来创建用户界面,这些库提供了丰富的组件和工具,可以构建出与QQ类似的图形用户界面,包括登录窗口、联系人列表、聊天窗口等。 聊天系统的实现涉及到多个关键...

    即时通信系统(Java实现)

    这可以通过用户名/密码、OAuth等机制实现,Java的Jasypt或Apache Shiro库可以帮助处理这些功能。 6. **数据库集成**:为了存储用户信息、聊天记录等,系统通常会连接到数据库。Java的JDBC API使得与MySQL、Oracle、...

    java开源包8

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics