网站做百度地图定位,阿里云域名购买官网,seo关键词排名优化方案,哪个公司建网站#x1f4dd;个人主页#xff1a;哈__
期待您的关注 目录 #x1f4d5;jasypt简介 #x1f525;SpringBoot使用jasypt
#x1f4c2;创建我需要的数据库文件 #x1f4d5;引入依赖
#x1f513;配置数据库文件#xff08;先不进行加密#xff09;
#x1f319;创… 个人主页哈__
期待您的关注 目录 jasypt简介 SpringBoot使用jasypt
创建我需要的数据库文件 引入依赖
配置数据库文件先不进行加密
创建mapper接口
配置文件加密
一、通过测试获取加密后的数据 二、通过build插件 jasypt简介 JasyptJava Simplified Encryption是一个专注于简化Java加密操作的开源工具。它提供了一种简单而强大的方式来处理数据的加密和解密使开发者能够轻松地保护应用程序中的敏感信息如数据库密码、API密钥等。 Jasypt的设计理念是简化加密操作使其对开发者更加友好。它采用密码学强度的加密算法支持多种加密算法从而平衡了性能和安全性。其中Jasypt的核心思想之一是基于密码的加密Password Based EncryptionPBE通过用户提供的密码生成加密密钥然后使用该密钥对数据进行加密和解密。此外Jasypt还引入了盐Salt的概念通过添加随机生成的盐值提高了加密的安全性防止相同的原始数据在不同的加密过程中产生相同的结果有效抵御彩虹表攻击。 Jasypt的功能非常丰富包括加密属性文件、Spring Framework集成、加密Hibernate数据源配置、URL加密的Apache Wicket集成等。它还可以与Acegi Security即Spring Security整合用于加密任务与应用程序如加密密码、敏感信息和数据通信以及创建完整检查数据的sums等。此外Jasypt还提供了一个开放的API使得任何Java Cryptography Extension都可以使用它。 在Spring Boot应用中Jasypt Spring Boot Starter是一个方便的集成工具可以简化加密功能的配置。它支持多种加密算法包括对称加密和非对称加密可以根据实际需求选择合适的加密方式。通过使用Jasypt Spring Boot Starter可以轻松地将加密功能集成到Spring Boot应用中无需手动配置复杂的加密相关的代码和配置文件。 ⭐jasypt的优点 提供简单的单向摘要和双向加密技术。用于任何JCE提供程序的开放API而不仅仅是默认的Java VM提供程序。为您的用户密码提供更高的安全性。二进制加密支持。Jasypt允许对二进制文件字节数组进行摘要和加密。数值加密支持。除了文本和二进制文件它还允许对数值进行摘要和加密BigInteger和BigDecimal加密Hibernate持久性时支持其他数字类型。完全线程安全。支持加密/摘要池以在多处理器/多核系统中实现高性能。包括库的轻量级“精简”版本以便在移动平台等大小受限的环境中具有更好的可管理性。 SpringBoot使用jasypt
创建我需要的数据库文件
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS student;
CREATE TABLE student (s_id varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ,s_name varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ,s_birth varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ,s_sex varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ,PRIMARY KEY (s_id) USING BTREE
) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_bin ROW_FORMAT Compact;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO student VALUES (01, 赵雷, 1990-01-01, 男);
INSERT INTO student VALUES (02, 钱电, 1990-12-21, 男);
INSERT INTO student VALUES (03, 孙风, 1990-05-20, 男);
INSERT INTO student VALUES (04, 李云, 1990-08-06, 男);
INSERT INTO student VALUES (05, 周梅, 1991-12-01, 女);
INSERT INTO student VALUES (06, 吴兰, 1992-03-01, 女);
INSERT INTO student VALUES (07, 郑竹, 1989-07-01, 女);
INSERT INTO student VALUES (08, 王菊, 1990-01-20, 女);SET FOREIGN_KEY_CHECKS 1; 引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.5/version/dependency!-- 引入核心依赖 --dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.0.3/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.2/version/dependency
配置数据库文件先不进行加密
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingUTF-8serverTimezoneUTCuseSSLfalsedriver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 2020
创建mapper接口 这里使用的是MybatisPlus如果不会使用可以看我另一篇文章【Spring】SpringBoot整合MybatisPlus的基本应用_简单的springbootmybatisplus的应用程序-CSDN博客 Mapper
public interface StudentMapper extends BaseMapperStudent {
} 加下来进行进行测试。直接调用了mapper的selectList方法。 ResourceStudentMapper studentMapper;Testvoid findStudent(){ListStudent students studentMapper.selectList(null);students.forEach(System.out::println);} 结果也没问题。但我们这样把数据库密码暴露出来难免是不安全的别人以看你的配置文件就知道你的数据库密码如果是你本地环境也就算了但如果是你的服务器环境一旦被别人知道了你的密码就糟糕了所以接下来采用加密的方式展示配置文件中的一些内容。 配置文件加密 引入依赖 jasypt:encryptor:# 采用的加密算法algorithm: PBEWITHHMACSHA512ANDAES_256# 盐粒password: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92property:prefix: ENC(suffix: )iv-generator-classname: org.jasypt.iv.RandomIvGenerator 把上方的依赖引入之后我们就可以使用jasypt去进行加密了。我在这里介绍两种方式。 一、通过测试获取加密后的数据 ResourceStringEncryptor stringEncryptor;Testvoid contextLoads() {String url stringEncryptor.encrypt(jdbc:mysql://localhost:3306/test);String username stringEncryptor.encrypt(root);String password stringEncryptor.encrypt(2020);System.out.println(urlurl);System.out.println(usernameusername);System.out.println(passwordpassword);} 加密后的数据我们已经能够看到了我现在把这些数据替换到我的application配置文件中。 spring:datasource:url: ENC(avXTcfv9THzOKeuZ0uo38uc5K1W/8YHL2Iarf0R308uIsr2x3rRwXWmEDUQvxIFn25IQjCpzHQaZ9pwg0qOcBiNaiF1AAVi8W9actPo)driver-class-name: com.mysql.jdbc.Driverusername: ENC(1u9zbtQFYbb6EiNNQrl1bfGiQ2LfuhDsQ8RPFbZSBTsetSbVmJi4jRDbTKwE8NQv)password: ENC(eG38KVuezyPxMq1kcX/eZuXZZbWKYdSY0ITlZdXCh0CXnnfH5ktdWAqiqOSmaeqB) 现在调用刚才测试mapper接口的方法看看结果。 还是正确的如果你不相信可以调用下边的代码来看看你的加密数据解密后是不是你真正的数据。方法内的参数需要你自己填写就是你刚才生成的那些加密的数据。我就不在这里演示了。 String url stringEncryptor.decrypt(...);String username stringEncryptor.decrypt(...);String password stringEncryptor.decrypt(...);System.out.println(urlurl);System.out.println(usernameusername);System.out.println(passwordpassword); 二、通过build插件 上方给出的方法虽然我们将数据加密了但是作为核心的“盐粒”我们却暴露了出来如果我们不想将“盐粒”暴露呢那么在你的pom文件中添加下边的代码。 buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/pluginplugingroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-maven-plugin/artifactIdversion3.0.3/versionconfigurationpathfile:src/main/resources/application.yml/path/configuration/plugin/plugins/build 修改配置文件。 spring:datasource:url: DEC(jdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingUTF-8serverTimezoneUTCuseSSLfalse)driver-class-name: com.mysql.jdbc.Driverusername: DEC(root)password: DEC(2020)
jasypt:encryptor:algorithm: PBEWITHHMACSHA512ANDAES_256property:prefix: ENC(suffix: )iv-generator-classname: org.jasypt.iv.RandomIvGenerator 运行下方指令。后边的那一串就是你要是用的密钥我是生成出来的。 mvn jasypt:encrypt -Djasypt.encryptor.password8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 之后再次点击你的配置文件查看。原始的数据已经被加密了并且这个加密的“盐粒”只有你知道。 那么接下来在调用mapper测试接口试试这里会报红因为你的配置文件是加密过的你怎么可能直接去使用一个加密过的数据呢你必须要先解密但是你并没有在配置文件当中提供这个“盐粒”所以你要通过其他的方式把这个“盐粒”添加进去。 为了方便展示我在这里创建一个controller调用的是studentServiceImpl之后在调用studentMapper。因为项目要打包所以只能这样展示通过前端来展示数据。 引入web依赖。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency 在StudentController中添加方法。 RestController
RequestMapping(/student)
public class StudentController {Resourceprivate StudentService studentService;RequestMapping(/find-student)public String findStudent(){return studentService.list().toString();}
} 把项目打包。 之后在target目录下找到我们打包好的项目打开cmd窗口运行下方指令。(盐粒要改成你自己的) java -jar 你自己起的包名.jar --jasypt.encryptor.password8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 访问网址查看数据正确解密成功。