Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

如何使用 Jasypt 加密 Spring Boot 项目中的密码

在本文中,我们将学习如何加密 Spring Boot 应用程序配置文件(如 application.properties 或 application.yml)中的数据。在这些文件中,我们可以加密用户名、密码等。

您经常会遇到开发项目,需要连接到 MongoDB等数据库,并将数据库连接的真实密码存储在 Spring Boot 项目的配置文件(application.yml 或 application.properties)中。甚至授权进行其他 API 调用所需的密码或令牌也以相同的方式存储。您实际上可以避免在配置文件中添加实际密码,并使用Java 库jasypt-spring-boot 。

Jasypt 是什么?

Jasypt  (Java 简化加密)为 Spring Boot 应用程序中的属性源提供加密支持。它将帮助您以极少的努力为您的项目添加基本的加密功能,并且无需编写任何代码,只需在您的项目中进行一些添加即可。Springboot 是一个非常强大的框架,它将帮助您添加加密功能而无需实现任何加密方法。Jasypt 具有高度可配置性。

使用 Jasypt 添加加密的步骤

  • 步骤1:添加Jasypt的Maven依赖
  • 第 2 步:在 Spring Boot 应用程序主配置中添加@EnableEncryptableProperties注释
  • 步骤3:选择加密和解密的密钥
  • 步骤 4:生成加密密钥
  • 步骤 5:在配置文件中添加加密密钥
  • 步骤6:运行时需要解密密钥
  • 步骤 7:运行应用程序。

步骤1:添加Jasypt的maven依赖

在 pom.xml 文件中,添加 maven 依赖项,该依赖项可以在 maven 存储库中轻松找到。

您可以使用以下依赖项作为参考:

<dependency>      <groupId>com.github.ulisesbocchio</groupId>       <artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

对于 Maven 插件依赖项,您可以使用以下依赖项:

<plugins><plugin><groupId>github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId></plugin>
</plugins>

第 2 步:在 Spring Boot 应用程序主配置类中添加注释

 需要添加@EnableEncryptableProperties注释以使应用程序了解整个Spring环境中的可加密属性。

@EnableEncryptableProperties
public class MyProject{//write the code here
}

步骤3:选择加密和解密的密钥

密钥用于加密密码,之后可用于解密加密值以获取实际密码。您可以选择任何值作为密钥。

步骤4:生成加密密钥 

加密密钥可以通过以下两种方法生成:

使用 Jasypt 在线工具:此  link  可用于通过传递所选密钥来生成加密密钥。

您实际上可以使用该工具加密并通过解密来检查加密密钥。

  • 加密密码:abcd1234
  • 选择加密类型: 双向加密(默认使用PBEWithMD5AndDES)
  • 密钥:你好(可以是任意值)
  • 加密字符串:kNuS1WAezYE7cph7zXVTiPSQSdHTx7Kv

使用 jasypt Jar: 从 maven 仓库下载 jasypt jar 文件并通过以下命令运行:

java -cp //jasypt-1.9.3/lib/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=”xyz123″ 
password=secretkey algorithm=PBEWithMD5AndDES

以下是运行jar时传递的命令行参数的意义:

  • 输入:abcd1234(需要加密的实际密码)
  • 密码:hello(您选择的密钥)
  • 算法:PBEWithMD5AndDES(使用默认算法)
  • 输出:scEjemHosjc/hjA8saT7Y6uC65bs0swg(输入的加密值)

注意:虽然 3.1 和 3.2 中的加密值(即加密字符串和输出)不同,但由于密钥相同,因此两种情况下解密都会产生相同的值(abcd1234)。

步骤 5:在配置文件(application.yml 或 application.properties)中添加加密密钥

现在,您无需像上面那样添加实际密码(例如“abcd1234”),而是需要添加通过上述任一方法生成的加密值。但是 jasypt 依赖项如何理解配置文件的特定属性需要解密?因此,为了让 Jasypt 知道您的加密值,它使用了一种约定,您需要按照以下格式添加它:

注: ENC(加密密钥):ENC(scEjemHosjc/hjA8saT7Y6uC65bs0swg)

在上图中,数据库密码的加密已完成。你可以在任何需要隐藏实际密码的场景中使用它。

步骤 6:运行时需要解密密钥

让 Jasypt 知道您用来形成加密值的密钥。因此,以下是传递密钥的不同方法: 

将其作为配置文件中的属性传递。照常运行项目,解密就会发生。

步骤 7:运行应用程序

现在使用以下命令运行该应用程序:

$ mvn-Djasypt.encryptor.password=secretkey spring-boot:run

导出Jasypt加密器密码:

JASYPT_ENCRYPTOR_PASSWORD=hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497457.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2011-2019年各省总抚养比数据

2011-2019年各省总抚养比数据 1、时间&#xff1a;2011-2019年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;行政区划代码、地区、年份、总抚养比(人口抽样调查)(%) 4、范围&#xff1a;31省 5、指标解释&#xff1a;总抚养比也称总负担系数。指人口总体中非劳动年…

Java基于SpringBoot的社区团购系统的设计与实现,附源码

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

libreoffice在Windows和Linux环境的安装和结合Springboot使用教程

前言&#xff1a; 在公司做开发时&#xff0c;遇到一个需求&#xff0c;要求上传的文件有图片&#xff0c;也有word和pdf。预览信息时&#xff0c;既要求能水印展示出来&#xff0c;又要求能大图水印预览。思索许久&#xff0c;我决定采取全部打水印然后转成图片Base64&#x…

Linux实验报告7-文件管理

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 (1)查看/etc/inittab文件的权限属性&#xff0c;并指出该文件的所有者以及文件所属组群。 (2)新建文件test&#xff0c;设置文件权限为r--r-----。 (3)新建文件test2&#xff0c;设系统中有用户study和用户组studygr…

07 基于OpenAMP的核间通信方案

引言 ZYNQ7020有两个CPU核心&#xff0c;这两个核心可以采用SMP或AMP方式进行调度&#xff0c;当采用AMP方式进行调度时核0和核1可以运行不同的操作系统&#xff0c;如核0运行Linux系统&#xff0c;提供有些复杂的用户交互工作&#xff0c;核1运行实时操作系统&#xff0c;对设…

Huggingface数据集采样之后得到的arrow文件无法用Dataset.load_from_disk加载解决方法

问题起源 我现在有数据集 我想要采样1/10构成一个新的数据集。起初我只是简单的使用save_to_disk保存&#xff0c;如下代码&#xff1a; from datasets import Dataset import os# 原数据集路径 source_dataset_path "~/.cache/huggingface/datasets/allenai___tulu-3-…

【畅购商城】购物车模块之查看购物车

目录 分析 接口 后端实现 前端实现&#xff1a;显示页面 前端实现&#xff1a;显示购物车信息 分析 用户如果没有登录&#xff0c;购物车存放在浏览器端的localStorage处&#xff0c;且以数组的方式进行存储。用户如果登录了&#xff0c;购物车存放在redis中&#xff0c…

html+css+js网页设计 美食 逛吃网7个页面

htmlcssjs网页设计 美食 逛吃网7个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 该网站是美食菜谱社区…

记录C#知识点(三)41-60

目录 41.winform启动wpf程序 42.winform调用wpf 43.nuget安装包问题 41.winform启动wpf程序 winform启动wpf程序的时候 以下方式会导致winform界面有问题 WpfApp1.App.Main(); 使用下面的方式 可以解决 winform启动 new WindowsFormsApp1.Form1().Show(); wpf启动 new …

图解Modern Cpp内存序

文章目录 为什么需要内存序?内存序的分类内存序的作用指令重排序限制跨线程可见性 样例分析完全乱序: memory_order_relaxed读写同步: memory_order_acquire 和 memory_order_release一致性 memory_order_seq_cst6. 内存序的权衡总结 C 内存序(Memory Order)定义了多线程环境下…

MySQL第二弹----CRUD

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;MySQL &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 一、修改表 使用ALTER …

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…

AE Dressler CESAR 1312 Generator Model User Manual

AE Dressler CESAR 1312 Generator Model User Manual

每天40分玩转Django:Django类视图

Django类视图 一、知识要点概览表 类别知识点掌握程度要求基础视图View、TemplateView、RedirectView深入理解通用显示视图ListView、DetailView熟练应用通用编辑视图CreateView、UpdateView、DeleteView熟练应用Mixin机制ContextMixin、LoginRequiredMixin理解原理视图配置U…

建造者模式 Builder Pattern

在创建一个对象的时候&#xff0c;构造器参数有点多&#xff0c;而且有些参数还是可选的&#xff0c;再者还有不少同类型的&#xff0c;那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性&#xff08;mutability&#xff09;移动到Builder类&#xff0c;而…

OpenCV-Python实战(11)——边缘检测

一、Sobel 算子 通过 X 梯度核与 Y 梯度核求得图像在&#xff0c;水平与垂直方向的梯度。 img cv2.Sobel(src*,ddepth*,dx*,dy*,ksize*,scale*,delta*,borderType*)img&#xff1a;目标图像。 src&#xff1a;原始图像。 ddepth&#xff1a;目标图像深度&#xff0c;-1 代表…

Github优质项目推荐(第十期)

文章目录 Github优质项目推荐&#xff08;第十期&#xff09;一、【postiz-app】&#xff0c;14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】&#xff0c;50.1k stars - AI 聊天框架三、【cobalt】&#xff0c;22.1k stars - 媒体下载器四、【build-your-own-x】…

【Linux】:Linux网络编程基础

1 网络基础概念 计算机网络背景 网络发展 独立模式:计算机之间相互独立; 网络互联:多台计算机连接在一起,完成数据共享 局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起 广域网WAN:将远隔千里的计算机都连在一起 所谓"局域网"和"广域网"只是…

基于Golang的博客系统的设计与实现

全文字数&#xff1a;6040 全文字符数&#xff1a;3753 正文字数&#xff1a;5296 正文字符数&#xff1a;3176 图片数&#xff1a;8 表格数&#xff1a;10 Abstract With the continuous development of the Internet, more and more internet developers will use blogs to…

Type-C接口的拍摄云台

在摄影与摄像的世界里&#xff0c;稳定性是确保画面流畅、清晰的关键因素之一。无论是专业摄影师还是摄影爱好者&#xff0c;都深知在拍摄过程中&#xff0c;任何微小的抖动都可能对最终作品产生不可忽视的影响。为了克服这一挑战&#xff0c;拍摄云台应运而生&#xff0c;成为…