iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot中怎么实现api加密
  • 261
分享到

SpringBoot中怎么实现api加密

2023-06-20 15:06:43 261人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关SpringBoot中怎么实现api加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是RSA加密首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以

这篇文章将为大家详细讲解有关SpringBoot中怎么实现api加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

什么是RSA加密

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

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

SpringBoot中怎么实现api加密

举例子大法

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

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

RSA的加密过程如下:

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

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

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

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

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

RSA签名的过程如下:

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

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

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

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

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

加密实战

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

实战准备

新建一个springboot项目

springboot_api_encryption

引入Maven依来

<dependency>    <groupId>cn.shuibo</groupId>    <artifactId>rsa-encrypt-body-spring-boot</artifactId>    <version>1.0.1.RELEASE</version></dependency>

启动类Application中添加@EnableSecurity注解

@SpringBootApplication@EnableSecuritypublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }}

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

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

rsa:  encrypt:    open: false # 是否开启加密 true  or  false    showLog: true # 是否打印加解密log true  or  false    publicKey: # RSA公钥 软件生成    privateKey: # RSA私钥 软件生成

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

@Encrypt@GetMapping("/encryption")public TestBean encryption(){    TestBean testBean = new TestBean();    testBean.setName("shuibo.cn");    testBean.setAge(18);    return testBean;}

对传过来的加密参数解密

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

@Decrypt@PostMapping("/decryption")public String Decryption(@RequestBody TestBean testBean){    return testBean.toString();}

真刀真枪

引入maven

SpringBoot中怎么实现api加密

启动类添加注解

SpringBoot中怎么实现api加密

YML添加配置密钥

SpringBoot中怎么实现api加密

创建一个实体类

SpringBoot中怎么实现api加密

写一个对外API接口

SpringBoot中怎么实现api加密

启动项目

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

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

SpringBoot中怎么实现api加密

修改

修改open为true 打开加密

rsa:  encrypt:    open: true # 是否开启加密 true  or  false    showLog: true # 是否打印加解密log true  or  false    publicKey: # RSA公钥 软件生成    privateKey: # RSA私钥 软件生成

再次重启项目

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

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

加密日志

SpringBoot中怎么实现api加密

解密实战

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

服务端有私密钥、跟公密钥

前端只需要公密钥就可以

实战准备

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

前端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>

后台增加解密方法

@PostMapping("/decryption")@Decrypt@ResponseBodypublic String Decryption(@RequestBody User user){    System.out.println(user.toString());    return user.toString();}

js方法

#公钥 var PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobhGH4WMwMvJRUlTxWrCVIOQtsHijAxPJNvAWAgq80ADpFEWrpbcGB9cKqp6XHRH4k/CVtCUZ7jm9UKwhaeAm18sKtcwe+M8JFNX6FSHpgde0o8C9S/QpcmLxf4iN7nGZ7P3ZTvMdmKUcdRMsVQnsydG2Bj6gRxP2+kexEebTeODbdM7dHlkxAL0RxGWmX/ZOBzsoWZw2gKcC0vxwyIZBGHUdImG2T3nEA+VMfK2Yqv3uSYukmlKP+0mjfhrTtLFDuTV1VER9BfryBMvpQCxLO4pqgZnXPd+SOQcZHZ2OL0wqo5OX1+GPYx7TNxz5Qi76pK//T2mH7s6X/BuyT21HQIDAQAB';function RSA_encryption(JSONData) {var encrypt = new JSEncrypt();encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----');var encrypted = encrypt.encrypt(JSON.stringify(jsonData));console.log('加密前数据:%o', str);console.log('加密后数据:%o', encrypted);return encrypted;}function tijiao() {var str = {"name":"1223334","passWord":"asd",age:1};$.ajax({url: "/decryption",type : "POST",contentType: "application/json;charset=utf-8",data : RSA_encryption(str) ,success : function(data) {alert(data);}})}

真刀真枪

Controller添加解密方法接口

SpringBoot中怎么实现api加密

前端页面引入js以及方法

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>加密传后端,后端解密<button id="jiami" onclick="tijiao()">加密传后端</button><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><script>    var PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobhGH4WMwMvJRUlTxWrCVIOQtsHijAxPJNvAWAgq80ADpFEWrpbcGB9cKqp6XHRH4k/CVtCUZ7jm9UKwhaeAm18sKtcwe+M8JFNX6FSHpgde0o8C9S/QpcmLxf4iN7nGZ7P3ZTvMdmKUcdRMsVQnsydG2Bj6gRxP2+kexEebTeODbdM7dHlkxAL0RxGWmX/ZOBzsoWZw2gKcC0vxwyIZBGHUdImG2T3nEA+VMfK2Yqv3uSYukmlKP+0mjfhrTtLFDuTV1VER9BfryBMvpQCxLO4pqgZnXPd+SOQcZHZ2OL0wqo5OX1+GPYx7TNxz5Qi76pK//T2mH7s6X/BuyT21HQIDAQAB';        function RSA_encryption(jsonData) {        var encrypt = new JSEncrypt();        encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----');        var encrypted = encrypt.encrypt(JSON.stringify(jsonData));        console.log('加密前数据:%o', jsonData);        console.log('加密后数据:%o', encrypted);        return encrypted;    }        function tijiao() {        var str = {            "name":"1223334",            "password":"asd",            age:1        };            $.ajax({                url: "/decryption",                type : "POST",                contentType: "application/json;charset=utf-8",                data : RSA_encryption(str) ,                success : function(data) {                    alert(data);                }            })    }</script></body></html>

启动访问

http://localhost:8080

SpringBoot中怎么实现api加密

后台解密日志

SpringBoot中怎么实现api加密

总结

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

祝大家:每天学习一点,技术成长飞快

项目坑点

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

以下是主意事项:

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

$.ajax({    url: "/decryption",    type : "POST",    contentType: "application/json;charset=utf-8",    data : RSA_encryption(str) ,    success : function(data) {        alert(data);    }})

解密方法必须 @RequestBody

@PostMapping("/decryption")@Decrypt@ResponseBodypublic String Decryption(@RequestBody User user){    System.out.println(user.toString());    return user.toString();}

关于SpringBoot中怎么实现api加密就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: SpringBoot中怎么实现api加密

本文链接: https://www.lsjlt.com/news/297798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot中怎么实现api加密
    这篇文章将为大家详细讲解有关SpringBoot中怎么实现api加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是RSA加密首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以...
    99+
    2023-06-20
  • SpringBoot怎么实现api加密
    这篇“SpringBoot怎么实现api加密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实现api...
    99+
    2023-06-08
  • SpringBoot如何实现api加密
    本文小编为大家详细介绍“SpringBoot如何实现api加密”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot如何实现api加密”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。SpringBoo...
    99+
    2023-07-06
  • SpringBoot实现api加密的示例代码
    目录SpringBoot的API加密对接项目介绍什么是RSA加密加密实战实战准备真刀真枪解密实战实战准备真刀真枪总结项目坑点SpringBoot的API加密对接 在项目中,为了保证数...
    99+
    2024-04-02
  • springboot项目数据库密码怎么实现加密
    这篇文章主要介绍了springboot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。方案一、使用d...
    99+
    2023-06-08
  • SpringBoot整合BCrypt实现密码加密
    本文实例为大家分享了SpringBoot整合BCrypt实现密码加密的具体代码,供大家参考,具体内容如下 一. 首先在pom依赖中加入依赖: <!-- security依赖...
    99+
    2024-04-02
  • .NET API接口数据传输加密怎么实现
    这篇文章主要介绍了.NET API接口数据传输加密怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.NET API接口数据传输加密怎么实现文章都会有所收获,下面我们一起来看看吧。硬编码...
    99+
    2023-07-04
  • SpringCloud Gateway实现API接口加解密
    目录接口范围启用禁用/版本加密算法报文格式网关实现细节代码filter过滤器请求配置和请求方式分发Get请求参数解密包装 ServerHttpRequestDecorato...
    99+
    2024-04-02
  • c#中base64加密怎么实现
    在C#中实现Base64加密可以使用Convert.ToBase64String方法,示例如下: string plainText ...
    99+
    2024-04-08
    c#
  • c#中怎么实现sm4加密
    在C#中实现SM4加密可以通过使用第三方库来实现。一个常用的库是Bouncy Castle,可以通过NuGet安装。 首先,安装Bo...
    99+
    2024-04-02
  • SpringBoot配置文件中密码属性加密的实现
    目录背景集成jasypt-spring-boot到项目中配置文件配置加密与读取工作原理简析使用自定义的加密算法结语本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,...
    99+
    2024-04-02
  • Springboot实现密码加密解密的示例分析
    这篇文章主要介绍了Springboot实现密码加密解密的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。现今对于大多数公司来说,信息安全工作尤为重要,就像京东,阿里巴巴...
    99+
    2023-05-30
    springboot
  • docker remote api一键TLS加密的实现
    目录1、修改docker的2375端口为另外的端口,这只是权宜之计。2、给docker进行tls加密最近公司服务器被挖矿了,最后原因定位到docker的2375端口。 让我们来理一下...
    99+
    2024-04-02
  • DynamoDB中怎么实现数据加密
    在DynamoDB中实现数据加密可以通过多种方式完成,以下是一些常用的方法: 使用客户端端加密:在应用程序中使用客户端端加密技术对...
    99+
    2024-04-09
    DynamoDB
  • springboot中request和response的加解密实现代码
    目录1、新建一个springboot工程,pom依赖如下2、自定义加密、解密的注解3、加密算法4、对请求数据进行解密处理5、对响应数据进行加密处理6、加解密的key的配置类,从配置文...
    99+
    2024-04-02
  • Springboot实现对配置文件中的明文密码加密
    前言 我们在SpringBoot项目当中,会把数据库的用户名密码等配置直接放在yaml或者properties文件中,这样维护数据库的密码等敏感信息显然是有一定风险的,如果相关的配置文件被有心之人拿到,必然会给项目造成一定的安全风险;所以为...
    99+
    2023-09-09
    spring boot mysql spring
  • SpringSecurity中密码加盐怎么实现
    这篇文章主要介绍“SpringSecurity中密码加盐怎么实现”,在日常操作中,相信很多人在SpringSecurity中密码加盐怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringSecur...
    99+
    2023-06-19
  • VB.NET中怎么实现字符串加密解密
    这篇文章给大家介绍VB.NET中怎么实现字符串加密解密,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。VB.NET字符串加密解密的安全说明: 与 DES 相比,Rijndael(现在称为“高级加密标准”[AES])和“三...
    99+
    2023-06-17
  • python rsa加密解密怎么实现
    在Python中,可以使用`cryptography`库来实现RSA加密和解密。以下是一个示例: from cryptography...
    99+
    2023-10-26
    python
  • api接口数据怎么加密
    使用AES加密算法对api接口数据进行加密,具体方法如下:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作