Spring Boot中的数据加密与解密

Spring Boot中的数据加密与解密

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

1. 引言

数据安全是每个现代应用程序的重要组成部分。在应用程序中使用加密技术可以有效保护敏感数据,防止数据泄露和篡改。本文将介绍如何在Spring Boot应用中实现数据加密和解密,并通过示例展示其基本用法和一些常见的最佳实践。

2. 准备工作

在开始之前,请确保您的Spring Boot项目已经正确配置并运行,并且您已经熟悉基本的Spring Boot开发和加密解密的概念。

3. 使用Java加密库

Java提供了丰富的加密解密库,我们可以利用这些库来实现数据的安全处理。下面是一个简单的示例,演示如何使用Java加密库来对数据进行加密和解密。

3.1 添加依赖

首先,在您的Spring Boot项目的pom.xml中添加Java加密库的依赖:

xml 复制代码
<!-- Maven 依赖 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>
3.2 创建加解密工具类

创建一个工具类来处理数据的加密和解密操作:

java 复制代码
package cn.juwatech.util;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.Base64;

public class EncryptionUtil {

    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final String AES_KEY = "mySecretAESKey123"; // 16 bytes key for AES
    private static final String AES_IV = "myInitializationVector"; // 16 bytes IV for AES

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static String encrypt(String plaintext) {
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            SecretKeySpec keySpec = new SecretKeySpec(AES_KEY.getBytes(), "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(AES_IV.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
            byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String decrypt(String ciphertext) {
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            SecretKeySpec keySpec = new SecretKeySpec(AES_KEY.getBytes(), "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(AES_IV.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext);
            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
            return new String(decryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
3.3 示例应用

现在,我们来创建一个简单的Spring Boot控制器,演示如何在应用中使用上述的加解密工具类:

java 复制代码
package cn.juwatech.controller;

import cn.juwatech.util.EncryptionUtil;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/data")
public class DataController {

    @PostMapping("/encrypt")
    public String encryptData(@RequestBody String data) {
        String encryptedData = EncryptionUtil.encrypt(data);
        return encryptedData;
    }

    @PostMapping("/decrypt")
    public String decryptData(@RequestBody String encryptedData) {
        String decryptedData = EncryptionUtil.decrypt(encryptedData);
        return decryptedData;
    }
}

4. 结论

通过本文的介绍,我们学习了如何在Spring Boot应用中使用Java加密库实现数据的安全加密和解密操作。数据加密是保护敏感信息免受未经授权访问的关键步骤,通过正确地实施和使用加密技术,可以显著提高应用程序的安全性和数据保护能力。

相关推荐
MY_TEUCK2 小时前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
今天长肉了吗2 小时前
银行风控项目踩坑实录:指标跑了6小时,风险评分全挂了
java
计算机程序定制辅导2 小时前
计算机小程序毕设实战-基于Spring Boot与微信小程序的考研资源共享平台设计与实现基于springboot+微信小程序的考研复习辅助平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
spring boot·微信小程序·小程序·课程设计
随读手机3 小时前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
许彰午3 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01284 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
野生技术架构师4 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
程序员飞哥4 小时前
重构 AI 思维(一):Prompt Engineering,如何下达不可违抗的指令?
人工智能·后端
一只叫煤球的猫5 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源
皮皮林5515 小时前
@Autowired 和 @Resource 注解有啥区别?你这项目怎么还混着用呢?
后端