最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密

 更新時(shí)間:2025年03月23日 10:56:47   作者:熊哈哈O_o  
Jasypt是一個(gè)專注于簡(jiǎn)化Java加密操作的開(kāi)源工具,這篇文章主要為大家介紹了詳細(xì)介紹了如何使用jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密,感興趣的小伙伴可以了解下

jasypt簡(jiǎn)介 

Jasypt(Java Simplified Encryption)是一個(gè)專注于簡(jiǎn)化Java加密操作的開(kāi)源工具。它提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)處理數(shù)據(jù)的加密和解密,使開(kāi)發(fā)者能夠輕松地保護(hù)應(yīng)用程序中的敏感信息,如數(shù)據(jù)庫(kù)密碼、API密鑰等。

Jasypt的設(shè)計(jì)理念是簡(jiǎn)化加密操作,使其對(duì)開(kāi)發(fā)者更加友好。它采用密碼學(xué)強(qiáng)度的加密算法,支持多種加密算法,從而平衡了性能和安全性。其中,Jasypt的核心思想之一是基于密碼的加密(Password Based Encryption,PBE),通過(guò)用戶提供的密碼生成加密密鑰,然后使用該密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。此外,Jasypt還引入了鹽(Salt)的概念,通過(guò)添加隨機(jī)生成的鹽值,提高了加密的安全性,防止相同的原始數(shù)據(jù)在不同的加密過(guò)程中產(chǎn)生相同的結(jié)果,有效抵御彩虹表攻擊。

Jasypt的功能非常豐富,包括加密屬性文件、Spring Framework集成、加密Hibernate數(shù)據(jù)源配置、URL加密的Apache Wicket集成等。它還可以與Acegi Security(即Spring Security)整合,用于加密任務(wù)與應(yīng)用程序,如加密密碼、敏感信息和數(shù)據(jù)通信,以及創(chuàng)建完整檢查數(shù)據(jù)的sums等。此外,Jasypt還提供了一個(gè)開(kāi)放的API,使得任何Java Cryptography Extension都可以使用它。

在Spring Boot應(yīng)用中,Jasypt Spring Boot Starter是一個(gè)方便的集成工具,可以簡(jiǎn)化加密功能的配置。它支持多種加密算法,包括對(duì)稱加密和非對(duì)稱加密,可以根據(jù)實(shí)際需求選擇合適的加密方式。通過(guò)使用Jasypt Spring Boot Starter,可以輕松地將加密功能集成到Spring Boot應(yīng)用中,無(wú)需手動(dòng)配置復(fù)雜的加密相關(guān)的代碼和配置文件。

jasypt的優(yōu)點(diǎn)

提供簡(jiǎn)單的單向(摘要)和雙向加密技術(shù)。

用于任何JCE提供程序的開(kāi)放API,而不僅僅是默認(rèn)的Java VM提供程序。

為您的用戶密碼提供更高的安全性。

二進(jìn)制加密支持。Jasypt允許對(duì)二進(jìn)制文件(字節(jié)數(shù)組)進(jìn)行摘要和加密。

數(shù)值加密支持。除了文本和二進(jìn)制文件,它還允許對(duì)數(shù)值進(jìn)行摘要和加密(BigInteger和BigDecimal,加密Hibernate持久性時(shí)支持其他數(shù)字類型)。
完全線程安全。

支持加密/摘要池,以在多處理器/多核系統(tǒng)中實(shí)現(xiàn)高性能。

包括庫(kù)的輕量級(jí)(“精簡(jiǎn)”)版本,以便在移動(dòng)平臺(tái)等大小受限的環(huán)境中具有更好的可管理性。

SpringBoot使用jasypt

創(chuàng)建我需要的數(shù)據(jù)庫(kù)文件

-- ----------------------------
-- 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', '孫風(fēng)', '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;

引入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.5</version>
        </dependency>
        <!--  引入核心依賴      -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
       
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

配置數(shù)據(jù)庫(kù)文件(先不進(jìn)行加密)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 2020

創(chuàng)建mapper接口

這里使用的是MybatisPlus,如果不會(huì)使用,可以看我另一篇文章SpringBoot整合MybatisPlus的基本應(yīng)用

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}

加下來(lái)進(jìn)行進(jìn)行測(cè)試。直接調(diào)用了mapper的selectList方法。

    @Resource
    StudentMapper studentMapper;
    @Test
    void findStudent(){
        List<Student> students = studentMapper.selectList(null);
        students.forEach(System.out::println);
    }

結(jié)果也沒(méi)問(wèn)題。但我們這樣把數(shù)據(jù)庫(kù)密碼暴露出來(lái)難免是不安全的,別人以看你的配置文件就知道你的數(shù)據(jù)庫(kù)密碼,如果是你本地環(huán)境也就算了,但如果是你的服務(wù)器環(huán)境,一旦被別人知道了你的密碼就糟糕了,所以接下來(lái)采用加密的方式展示配置文件中的一些內(nèi)容。

配置文件加密 

引入依賴

jasypt:
  encryptor:
    #  采用的加密算法
    algorithm: PBEWITHHMACSHA512ANDAES_256
    # 鹽粒
    password: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
    property:
      prefix: ENC(
      suffix: )
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator

把上方的依賴引入之后,我們就可以使用jasypt去進(jìn)行加密了。我在這里介紹兩種方式。

1.通過(guò)測(cè)試獲取加密后的數(shù)據(jù)

    @Resource
    StringEncryptor stringEncryptor;
    @Test
    void contextLoads() {
        String url = stringEncryptor.encrypt("jdbc:mysql://localhost:3306/test");
        String username = stringEncryptor.encrypt("root");
        String password = stringEncryptor.encrypt("2020");
        System.out.println("url="+url);
        System.out.println("username="+username);
        System.out.println("password="+password);
    }

加密后的數(shù)據(jù)我們已經(jīng)能夠看到了,我現(xiàn)在把這些數(shù)據(jù)替換到我的application配置文件中。

spring:
  datasource:
    url: ENC(avXTcfv9THzOKeuZ0uo38uc+5+K1W/8YHL2Iarf0R308uIsr2x3rRwXWmEDUQvxIFn25IQjCpzHQaZ9+pwg0qOcBi+NaiF1AAVi8W9actPo=)
    driver-class-name: com.mysql.jdbc.Driver
    username: ENC(1u9zbtQFYbb6EiNNQrl1bfGiQ2LfuhDsQ8RPFbZSBTsetSbVmJi4jRDbTKwE8NQv)
    password: ENC(eG38KVuezyPxMq1kcX/eZuXZZbWKYdSY0ITlZdXCh0CXnnfH5ktdWAqiqOSmaeqB)

現(xiàn)在調(diào)用剛才測(cè)試mapper接口的方法看看結(jié)果。

還是正確的,如果你不相信,可以調(diào)用下邊的代碼來(lái)看看,你的加密數(shù)據(jù)解密后是不是你真正的數(shù)據(jù)。方法內(nèi)的參數(shù)需要你自己填寫(xiě),就是你剛才生成的那些加密的數(shù)據(jù)。我就不在這里演示了。

        String url = stringEncryptor.decrypt("...");
        String username = stringEncryptor.decrypt("...");
        String password = stringEncryptor.decrypt("...");
        System.out.println("url="+url);
        System.out.println("username="+username);
        System.out.println("password="+password);

2.通過(guò)build插件

上方給出的方法,雖然我們將數(shù)據(jù)加密了,但是作為核心的“鹽粒”我們卻暴露了出來(lái),如果我們不想將“鹽粒”暴露呢?那么在你的pom文件中添加下邊的代碼。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.3</version>
                <configuration>
                    <path>file:src/main/resources/application.yml</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

修改配置文件。

spring:
  datasource:
    url: DEC(jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false)
    driver-class-name: com.mysql.jdbc.Driver
    username: DEC(root)
    password: DEC(2020)
jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    property:
      prefix: ENC(
      suffix: )
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator

運(yùn)行下方指令。后邊的那一串就是你要是用的密鑰,我是生成出來(lái)的。

mvn jasypt:encrypt -Djasypt.encryptor.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

之后再次點(diǎn)擊你的配置文件查看。原始的數(shù)據(jù)已經(jīng)被加密了,并且這個(gè)加密的“鹽粒”只有你知道。

 那么接下來(lái)在調(diào)用mapper測(cè)試接口試試?這里會(huì)報(bào)紅,因?yàn)槟愕呐渲梦募羌用苓^(guò)的,你怎么可能直接去使用一個(gè)加密過(guò)的數(shù)據(jù)呢?你必須要先解密,但是你并沒(méi)有在配置文件當(dāng)中提供這個(gè)“鹽粒”,所以你要通過(guò)其他的方式把這個(gè)“鹽粒”添加進(jìn)去。

 為了方便展示,我在這里創(chuàng)建一個(gè)controller,調(diào)用的是studentServiceImpl,之后在調(diào)用studentMapper。因?yàn)轫?xiàng)目要打包,所以只能這樣展示,通過(guò)前端來(lái)展示數(shù)據(jù)。

引入web依賴。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

在StudentController中添加方法。

@RestController
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;
 
    @RequestMapping("/find-student")
    public String findStudent(){
        return  studentService.list().toString();
    }
}

把項(xiàng)目打包。

之后在target目錄下找到我們打包好的項(xiàng)目,打開(kāi)cmd窗口運(yùn)行下方指令。(鹽粒要改成你自己的)

java -jar 你自己起的包名.jar --jasypt.encryptor.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 

 訪問(wèn)網(wǎng)址查看,數(shù)據(jù)正確,解密成功。

到此這篇關(guān)于SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密的文章就介紹到這了,更多相關(guān)SpringBoot jasypt加密數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法

    Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法

    這篇文章主要介紹了Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法,針對(duì)tcp/ip協(xié)議中保留的三個(gè)私有地址進(jìn)行判斷分析,是比較實(shí)用的技巧,需要的朋友可以參考下
    2015-01-01
  • Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題示例

    Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題,涉及java輸入輸出及字符串、數(shù)組的遍歷與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • PC 端微信掃碼注冊(cè)和登錄實(shí)例

    PC 端微信掃碼注冊(cè)和登錄實(shí)例

    這篇文章主要介紹了PC 端微信掃碼注冊(cè)和登錄實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java?方法的重載與參數(shù)傳遞詳解

    Java?方法的重載與參數(shù)傳遞詳解

    在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下方法的重載與傳參
    2022-04-04
  • mybatis?foreach傳兩個(gè)參數(shù)批量刪除

    mybatis?foreach傳兩個(gè)參數(shù)批量刪除

    這篇文章主要介紹了mybatis?foreach?批量刪除傳兩個(gè)參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細(xì)過(guò)程

    SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細(xì)過(guò)程

    Swagger工具集使用OpenAPI規(guī)范,可以生成、展示和測(cè)試基于OpenAPI規(guī)范的API文檔,并提供了生成客戶端代碼的功能,本文給大家介紹SpringBoot使用OpenAPI3規(guī)范整合knife4j的詳細(xì)過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • 使用java對(duì)一副撲克牌建模

    使用java對(duì)一副撲克牌建模

    這篇文章主要為大家詳細(xì)介紹了如何使用java對(duì)一副撲克牌建模,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • java 實(shí)現(xiàn)約瑟夫環(huán)的實(shí)例代碼

    java 實(shí)現(xiàn)約瑟夫環(huán)的實(shí)例代碼

    這一次是借鑒模仿別人寫(xiě)的代碼,以前覺(jué)得不好將數(shù)據(jù)結(jié)構(gòu)的鏈結(jié)構(gòu)什么的遷移到j(luò)ava上來(lái)使用,但這一次確實(shí)讓我感受到了可以自己構(gòu)造數(shù)據(jù)結(jié)構(gòu),然后使用類似鏈的方式來(lái)解決約瑟夫環(huán),有所頓悟。不多說(shuō),繼續(xù)上代碼
    2013-10-10
  • SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解

    SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解

    這篇文章主要通過(guò)示例為大家詳細(xì)介紹一下介紹了SpringBoot參數(shù)校驗(yàn)中@Valid的使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • Maven高頻配置錯(cuò)誤總結(jié)與解決方案

    Maven高頻配置錯(cuò)誤總結(jié)與解決方案

    在日常 Java 開(kāi)發(fā)中,Maven 幾乎是標(biāo)配構(gòu)建工具,但很多人在寫(xiě) pom.xml、搭建多模塊項(xiàng)目、處理依賴時(shí),總會(huì)遇到各種莫名其妙的報(bào)錯(cuò),本文把最常見(jiàn)、最容易踩坑的 Maven 配置問(wèn)題整理成一篇完整文章,需要的朋友可以參考下
    2026-03-03

最新評(píng)論

鄢陵县| 吉首市| 东乌珠穆沁旗| 尉犁县| 衡水市| 唐山市| 新绛县| 古交市| 开江县| 桃源县| 望谟县| 鹤峰县| 阜新市| 台中市| 大化| 巍山| 措美县| 将乐县| 海淀区| 新化县| 温泉县| 陆河县| 邹平县| 桐庐县| 禄丰县| 泊头市| 上栗县| 那曲县| 东乡| 铜陵市| 自治县| 东辽县| 恩平市| 安西县| 津南区| 通山县| 阿巴嘎旗| 大悟县| 美姑县| 那曲县| 太白县|