热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Jasypt为SpringBoot配置文件中的密码加密

在本教程中,我将指导您如何加密SpringBoot应用程序配置文件(应用程序.properties或应用程序.yml)中的敏感信息

在本教程中,我将指导您如何加密Spring Boot应用程序配置文件(应用程序.properties或应用程序.yml)中的敏感信息,例如数据源的用户名和密码,SMTP服务器的凭据等...使用Jasypt 库 – 为了提高基于Spring框架的Java应用程序的安全性。要学习本教程,您必须在计算机上(在任何 IDE 外部)安装 Maven。

1. 什么是Jasypt ?

Jasypt代表Java简化加密 - 一种高安全性和高性能的加密库,允许开发人员以最小的工作量为其项目添加基本的加密功能,而无需深入了解加密的工作原理。Jasypt提供基于标准的加密技术,可用于加密密码,文本,数字,二进制文件...它可以无缝、透明地与企业框架(如弹簧和休眠)集成。贾西普特易于使用,但高度可配置。有关更多信息,请访问Jasypt
主页。

2. 声明Jasypt Spring Boot和Jasypt Maven 插件的依赖关系

为了将 Jasypt 库用于弹簧启动应用程序,您需要在项目的 pom.xml 文件中声明以下依赖项:





1


2


3


4


5



<dependency>


  <groupId>com.github.ulisesbocchiogroupId>


  <artifactId>jasypt-spring-boot-starterartifactId>


  <version>3.0.3version>


dependency>



这会将一些 JAR 文件添加到项目的类路径中&#xff0c;这有助于 Jasypt 透明地解密应用程序配置文件中的加密值。

然后&#xff0c;您还需要声明Jasypt ·Maven 插件&#xff0c;如下所示&#xff1a;





1


2


3


4


5



<plugin>


   <groupId>com.github.ulisesbocchiogroupId>


   <artifactId>jasypt-maven-pluginartifactId>


   <version>3.0.3version>


 plugin>



此插件很重要&#xff0c;因为它允许使用Maven命令进行加密和解密&#xff0c;如以下各节所述。

3. 加密和解密单个字符串值

打开一个新的命令提示符窗口。将当前目录更改为 pom.xml 文件所在的项目目录。并键入以下命令&#xff1a;





1



mvn jasypt:encrypt-value -Djasypt.encryptor.password&#61;cafe21 -Djasypt.plugin.value&#61;n&#64;mHm2020



这将运行 Jasypt Maven 插件来加密字符串&#xff0c;n&#64;mHm2020使用私钥 cafe21 的默认加密配置。在输出中&#xff0c;你会看到它打印出类似下面的内容&#xff1a;





1



ENC(MBTWfX8gqMevQe5CKW0pToMbajnpJk0zlb3yoooiSWPjkfYrE8TFNF6vDEMXTu/j)



在这里&#xff0c;加密的值被包装在 ENC&#xff08;&#xff09; 中&#xff0c;然后您可以使用此值替换配置文件中的密码。如果再次运行上述命令&#xff0c;您将看到不同的加密值&#xff0c;因为默认加密器使用随机生成器。这意味着字符串可以是不同的加密值&#xff0c;尽管私钥是相同的。默认加密算法是双向的&#xff0c;这意味着您可以进行解密。键入以下命令&#xff1a;





1



mvn jasypt:decrypt-value -Djasypt.encryptor.password&#61;cafe21 -Djasypt.plugin.value&#61;MBTWfX8gqMevQe5CKW0pToMbajnpJk0zlb3yoooiSWPjkfYrE8TFNF6vDEMXTu/j



这将使用带有私钥 cafe21 的默认加密配置解密指定的值。然后你会看到它打印原始值 n&#64;mHm2020.So 这些加密和解密命令是你应该熟悉的非常基本的命令。

4. 加密应用程序属性文件中的凭据

假设您要在以下应用程序属性文件中加密 Spring 数据源的用户名和密码&#xff1a;





1


2


3


4



spring.jpa.hibernate.ddl-auto&#61;none


spring.datasource.url&#61;jdbc:mysql://localhost:3306/shopmedb


spring.datasource.username&#61;root


spring.datasource.password&#61;password



首先&#xff0c;将用户名和密码的值包装在 DEC&#xff08;&#xff09; 中&#xff0c;如下所示&#xff1a;





1


2


3


4



spring.jpa.hibernate.ddl-auto&#61;none


spring.datasource.url&#61;jdbc:mysql://localhost:3306/shopmedb


spring.datasource.username&#61;DEC(root)


spring.datasource.password&#61;DEC(password)



在这里&#xff0c;DEC&#xff08;&#xff09; 是一个占位符&#xff0c;它告诉 Jasypt 要加密什么&#xff0c;其余值保持不变。然后在命令提示符下&#xff0c;键入&#xff1a;





1



mvn jasypt:encrypt -Djasypt.encryptor.password&#61;cafe21



然后&#xff0c;它将应用程序属性文件中的 DEC&#xff08;&#xff09; 占位符替换为加密的值&#xff1a;





1


2


3


4



spring.jpa.hibernate.ddl-auto&#61;none


spring.datasource.url&#61;jdbc:mysql://localhost:3306/shopmedb


spring.datasource.username&#61;ENC(9tl1aMX4Ije8n0&#43;IcjyS...)


spring.datasource.password&#61;ENC(IQi6U2g7sz4pw6wL4GoY...)



瞧&#xff01;非常简单方便&#xff0c;对吧&#xff1f;无需手动复制和粘贴。只需将要加密的值放在 DEC&#xff08;&#xff09; 中&#xff0c;然后运行 mvn 贾西普特&#xff1a;加密 命令。

5. 使用Jasypt 运行Spring Boot应用程序

现在&#xff0c;要运行Spring Boot应用程序&#xff0c;您需要在命令提示符中将私钥密码作为VM参数传递&#xff0c;如下所示&#xff1a;





1



java -Djasypt.encryptor.password&#61;cafe21 –jar yourapp.jar



要在 Eclipse 或春季工具套件 IDE 中运行 Spring Boot 应用程序&#xff0c;您需要通过传递如下所示的 VM 参数来编辑运行配置&#xff1a;启动应用程序&#xff0c;当 Jasypt 透明地解密加密的凭据时&#xff0c;它将平稳运行。

6. 在 Spring 应用程序配置文件中解密凭据

如果要在弹簧启动配置文件中查看加密值的原始值&#xff0c;请键入以下 Maven 命令&#xff1a;





1



mvn jasypt:decrypt -Djasypt.encryptor.password&#61;cafe21



Jasypt 将在输出中打印应用程序属性文件的内容&#xff0c;就像加密之前一样。因此&#xff0c;此命令对于检查和验证目的很有用。请注意&#xff0c;它不会更新配置文件。

7. 加密应用程序.yml 文件中的凭据

默认情况下&#xff0c;贾西普特将更新应用程序属性文件。如果您在项目中使用 application.yml&#xff0c;请在命令中指定文件的路径&#xff0c;如下所示&#xff1a;





1



mvn jasypt:encrypt -Djasypt.encryptor.password&#61;cafe21 -Djasypt.plugin.path&#61;"file:src/main/resources/application.yml"



使用此语法&#xff0c;可以对任何所需的属性文件中的凭据进行加密。

8. 使用新的加密密码重新加密

如果要更改加密器的私钥&#xff08;密码&#xff09;&#xff0c;只需使用以下命令&#xff1a;





1



mvn jasypt:reencrypt -Djasypt.plugin.old.password&#61;cafe21 -Djasypt.encryptor.password&#61;10duke



然后&#xff0c;Jasypt Maven插件将使用旧密码cafe21加密的值替换为使用新密码10duke加密的新值 - 并且您可以立即更新配置文件。非常 方便 。

9. 在 Spring 配置类中配置加密器

Jasypt 易于使用&#xff0c;正如您在上面的命令中看到的那样。如果您具有一定的密码学知识并且想要自定义加密器的设置&#xff0c;它也具有高度可配置性。例如&#xff0c;在项目中创建一个新的 Spring 配置类&#xff0c;如下所示&#xff1a;





1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30



package net.codejava.security;


 


import org.jasypt.encryption.StringEncryptor;


import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;


import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;


import org.springframework.context.annotation.Bean;


import org.springframework.context.annotation.Configuration;


 


&#64;Configuration


public class JasyptAdvancedConfig {


 


    &#64;Bean(name &#61; "jasyptStringEncryptor")


    public StringEncryptor getPasswordEncryptor() {


        PooledPBEStringEncryptor encryptor &#61; new PooledPBEStringEncryptor();


        SimpleStringPBEConfig config &#61; new SimpleStringPBEConfig();


         


        config.setPassword("password"); // encryptor&#39;s private key


         


        config.setAlgorithm("PBEWithMD5AndDES");


        config.setKeyObtentionIterations("1000");


        config.setPoolSize("1");


        config.setProviderName("SunJCE");


        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");


        config.setStringOutputType("base64");


         


        encryptor.setConfig(config);


         


        return encryptor;


    }


}



此代码将覆盖默认加密配置&#xff0c;因此您需要编写一些代码来加密密码&#xff0c;如下所示&#xff1a;





1


2


3



String rawPassword &#61; "password";


String encryptedPassword &#61; encryptor.encrypt(rawPassword);


System.out.println(encryptedPassword);



然后通过将加密值放在 ENC&#xff08;&#xff09; 中来更新弹簧启动应用程序配置文件&#xff0c;如下所示&#xff1a;





1


2


3


4



spring.jpa.hibernate.ddl-auto&#61;none


spring.datasource.url&#61;jdbc:mysql://localhost:3306/shopmedb


spring.datasource.username&#61;ENC(encrypted_username)


spring.datasource.password&#61;ENC(encrypted_password)



这是关于使用Jasypt库在弹簧启动配置文件中加密密码的教程。

 


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
author-avatar
帅宁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有