news 2026/4/16 7:41:39

SpringBoot快速实现 api 加密!这法子我看行~

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot快速实现 api 加密!这法子我看行~

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。

项目介绍

该项目使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。

什么是RSA加密

首先我们当然是了解RSA加密

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

举例子大法

加密和签名都是为了安全性考虑,但略有不同。常有人问加密和签名是用私钥还是公钥?其实都是对加密和签名的作用有所混淆。简单的说,加密是为了防止信息被泄露,而签名是为了防止信息被篡改。这里举2个例子说明。

「第一个场景:」战场上,B要给A传递一条消息,内容为某一指令。

RSA的加密过程如下:

  • A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。

  • A传递自己的公钥给B,B用A的公钥对消息进行加密。

  • A接收到B加密的消息,利用A自己的私钥对消息进行解密。

在这个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。

「第二个场景:」A收到B发的消息后,需要进行回复“收到”。

RSA签名的过程如下:

  • A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。

  • A用自己的私钥对消息加签,形成签名,并将加签的消息和消息本身一起传递给B。

  • B收到消息后,在获取A的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是A回复的。

在这个过程中,只有2次传递过程,第一次是A传递加签的消息和消息本身给B,第二次是B获取A的公钥,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行签名,即使知道了消息内容,也无法伪造带签名的回复给B,防止了消息内容的篡改。

但是,综合两个场景你会发现,第一个场景虽然被截获的消息没有泄露,但是可以利用截获的公钥,将假指令进行加密,然后传递给A。第二个场景虽然截获的消息不能被篡改,但是消息的内容可以利用公钥验签来获得,并不能防止泄露。所以在实际应用中,要根据情况使用,也可以同时使用加密和签名,比如A和B都有一套自己的公钥和私钥,当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。

加密实战

博主你哔哩哔哩这么多,我已经知道了RSA是干什么了。不就是 公钥加密、私钥解密、私钥签名、公钥验签

实战准备

1、新建一个springboot项目

springboot_api_encryption

2、引入maven依来

3、启动类Application中添加@EnableSecurity注解

4、在application.yml或者application.properties中添加RSA公钥及私钥

公钥私钥的生成文章后面会放出生成工具

5、对Controller 里面的API方法进行加密

6、对传过来的加密参数解密

其他java端程序可以用注解,如果是vue,请用RSA密钥解密

真刀真枪

1、引入maven

2、启动类添加注解

3、YML添加配置密钥

4、创建一个实体类

5、写一个对外API接口

6、启动项目

请求地址: http://localhost:8080/encryption

我们看到返回的数据未加密

7、修改

修改open为true 打开加密

8、再次重启项目

请求地址: http://localhost:8080/encryption

我们看到返回的数据已加密

9、加密日志

解密实战

如果是其他springboot项目,跟前面一样。我们这儿就当客户端是springboot项目,其他的请使用RSA解密协议解密!

服务端有私密钥、公密钥

前端只需要公密钥就可以

实战准备

在原来的springboot基础上写一份解密方法

1、前端js解密方法

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.js"></script>

    2、后台增加解密方法

    3、js方法

    真刀真枪

    1、 Controller添加解密方法接口

    2、前端页面引入js以及方法

    3、启动访问

    http://localhost:8080

    4、后台解密日志

    总结

    经过上面的接口加密解密操作。可以看出我们的接口如果没有公钥、或者私钥别人根本无法解密!这样就对API接口起到了很好的保护作用,防止别人抓包!

    项目坑点

    此项目的demo无法访问,难点就在前端如何加密回传到后台解密,此坑我带大家爬出来了!

    以下是主意事项:

    1、 主意ajax的contentType:“application/json;charset=utf-8”;

    2、 解密方法必须@RequestBody;

    版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
    网站建设 2026/4/12 20:05:22

    YOLO11真实体验:AI视觉项目快速上手全过程

    YOLO11真实体验&#xff1a;AI视觉项目快速上手全过程 你是不是也曾经被复杂的环境配置劝退过&#xff1f;明明想动手做一个目标检测项目&#xff0c;结果光是装依赖就花了三天&#xff0c;还各种报错。最近我试了基于YOLO11算法的预置镜像&#xff0c;整个过程出乎意料地顺利…

    作者头像 李华
    网站建设 2026/3/22 21:02:46

    Langchain-Chatchat API架构解析与业务实践指南

    Langchain-Chatchat API架构解析与业务实践指南 【免费下载链接】Langchain-Chatchat 项目地址: https://gitcode.com/gh_mirrors/lang/Langchain-Chatchat Langchain-Chatchat作为基于大语言模型与Langchain框架构建的RAG知识库系统&#xff0c;其API设计体现了现代AI…

    作者头像 李华
    网站建设 2026/4/11 21:02:20

    AlpaSim自动驾驶仿真平台:5个步骤轻松开始算法测试

    AlpaSim自动驾驶仿真平台&#xff1a;5个步骤轻松开始算法测试 【免费下载链接】alpasim 项目地址: https://gitcode.com/GitHub_Trending/al/alpasim AlpaSim是一个开源的自动驾驶仿真平台&#xff0c;专门为自动驾驶算法开发者提供高效的测试和验证环境。无论你是研究…

    作者头像 李华
    网站建设 2026/4/15 11:31:12

    GPEN四种标签页功能详解,新手快速上手不迷茫

    GPEN四种标签页功能详解&#xff0c;新手快速上手不迷茫 1. 界面概览与核心功能介绍 打开GPEN图像肖像增强WebUI后&#xff0c;你会看到一个紫蓝渐变风格的现代化界面。整个操作区域被清晰地划分为四个主要功能标签页&#xff0c;每个标签页对应不同的使用场景和操作深度。对…

    作者头像 李华
    网站建设 2026/4/13 14:47:46

    YOLOE镜像实测:文本/视觉/无提示三种模式全体验

    YOLOE镜像实测&#xff1a;文本/视觉/无提示三种模式全体验 你有没有遇到过这样的场景&#xff1f;摄像头拍到一只从未训练过的动物&#xff0c;系统却能立刻识别出“这是雪豹”&#xff1b;或者一张复杂的工程图纸&#xff0c;AI自动圈出所有阀门和传感器位置&#xff0c;哪怕…

    作者头像 李华