jasypt保护用户名密码

本文介绍如何在Java应用中使用Jasypt加密敏感信息,如数据库用户名和密码,并展示了如何将这些加密后的信息集成到Spring框架中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>org.jasypt</groupId>  
  3.     <artifactId>jasypt</artifactId>  
  4.     <version>1.5</version>  
  5. </dependency>  

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

Java代码   收藏代码
  1. import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;  
  2. import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;  
  3.   
  4. /** 
  5.  *把密文放到配置文件中的时候要注意: 
  6.  * ENC(密文) 
  7.  * @author 杨尚川 
  8.  */  
  9. public class ConfigEncryptUtils {  
  10.     public static void main(String[] args){  
  11.         //加密工具  
  12.         StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();  
  13.         //加密配置  
  14.         EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();  
  15.         config.setAlgorithm("PBEWithMD5AndDES");  
  16.         //自己在用的时候更改此密码  
  17.         config.setPassword("apdplat");  
  18.         //应用配置  
  19.         encryptor.setConfig(config);  
  20.         String plaintext="root";  
  21.         //加密  
  22.         String ciphertext=encryptor.encrypt(plaintext);  
  23.         System.out.println(plaintext + " : " + ciphertext);  
  24.     }  
  25. }  

运行输出结果如下:

    root : azL9Cyp9H62r3eUgZ+TESw==

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

Java代码   收藏代码
  1. import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;  
  2. import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;  
  3.   
  4. /** 
  5.  *把密文放到配置文件中的时候要注意: 
  6.  * ENC(密文) 
  7.  * @author 杨尚川 
  8.  */  
  9. public class ConfigEncryptUtils {  
  10.     public static void main(String[] args){  
  11.         //加密工具  
  12.         StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();  
  13.         //加密配置  
  14.         EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();  
  15.         config.setAlgorithm("PBEWithMD5AndDES");  
  16.         //自己在用的时候更改此密码  
  17.         config.setPassword("apdplat");  
  18.         //应用配置  
  19.         encryptor.setConfig(config);  
  20.         String ciphertext="azL9Cyp9H62r3eUgZ+TESw==";  
  21.         //解密  
  22.         String plaintext=encryptor.decrypt(ciphertext);  
  23.         System.out.println(ciphertext + " : " + plaintext);  
  24.     }  
  25. }  

运行输出结果如下:

   azL9Cyp9H62r3eUgZ+TESw== : root

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

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

Xml代码   收藏代码
  1. <!-- Spring属性文件解密组件  -->  
  2. <bean id="propertyConfigurer" class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">  
  3.     <constructor-arg ref="configurationEncryptor" />  
  4.     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />  
  5.     <property name="ignoreResourceNotFound" value="true" />  
  6.     <property name="locations">  
  7.         <list>  
  8.             <value>classpath:/org/apdplat/config.properties</value>  
  9.             <value>classpath:config.local.properties</value>  
  10.             <value>classpath:/org/apdplat/db.properties</value>  
  11.             <value>classpath:db.local.properties</value>  
  12.         </list>  
  13.     </property>  
  14. </bean>  
  15.   
  16. <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">  
  17.     <property name="config" ref="environmentVariablesConfiguration" />  
  18. </bean>  
  19.   
  20. <bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">  
  21.     <property name="algorithm" value="PBEWithMD5AndDES" />  
  22.     <property name="password" value="apdplat" />  
  23. </bean>  

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

Xml代码   收藏代码
  1. #数据库配置文件  
  2.   
  3. #mysql  
  4. db.driver=com.mysql.jdbc.Driver  
  5. db.url=jdbc:mysql://localhost:3306/${module.short.name}?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true&autoReconnect=true  
  6. db.username=ENC(qPWWR8YEmQE63EYywEBKaQ==)  
  7. db.password=ENC(qPWWR8YEmQE63EYywEBKaQ==)  
  8. jpa.database=MYSQL  
  9. db.backup.command=mysqldump  -u${db.username} -p${db.password} ${module.short.name}  
  10. db.restore.command=mysql -u${db.username} -p${db.password} ${module.short.name}  

 

 

 

Spring Boot是一个开源的Java框架,可帮助开发者更快速地构建应用程序。Jasypt3是Spring Boot中一种常用的加密库,可用于加密敏感数据,如数据库密码。下面简要介绍如何使用Spring Boot和Jasypt3来加密数据库密码: 1. 添加依赖:在pom.xml中添加Jasypt3的依赖,如下所示: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> ``` 2. 配置加密算法和密钥: 在Spring Boot的配置文件(application.properties或application.yml)中添加以下配置: ```properties jasypt.encryptor.algorithm=算法 jasypt.encryptor.password=密钥 ``` 3. 加密数据库密码: 在配置文件中使用Jasypt3提供的加密语法将数据库密码进行加密。例如,假设我们要加密的密码是"password",可以使用以下语法: ```properties encryptor.encrypt(密码) ``` 4. 使用加密的密码: 在项目中的数据源配置文件(如application.properties)中,使用加密后的密码。例如: ```properties spring.datasource.username=用户名 spring.datasource.password=ENC(加密的密码) ``` 5. 运行应用程序: 启动Spring Boot应用程序,它将自动使用配置的密钥解密密码,然后使用解密后的密码连接数据库。 通过以上步骤,我们可以使用Spring Boot和Jasypt3来实现数据库密码的加密。这样可以保护敏感数据的安全性,同时提供了一种方便的方法来管理加密密钥和加密算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值