前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot接口返回及入参RSA加解密

Spring Boot接口返回及入参RSA加解密

原创
作者头像
Bobby
修改2020-06-11 10:13:55
4.9K0
修改2020-06-11 10:13:55
举报
文章被收录于专栏:开心码农开心码农

本文介绍Spring Boot如何对接口的返回及入参进行RSA加解密,在日常工作中往往有些项目对安全性要求比较高,这个时候作为开发就要考虑如何安全的对接口进行加密。本文内容及设计方式为个人在碰到此问题时的解决方案,不担保适用于所有系统,所有场景,仅供参考。

为了方便使用,已开源并打包发布至Maven中央库供大家学习交流。

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。

常用的加密算法包括对称加密(AES)和非对称加密(RSA)

什么是RSA加密

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

RSA的加密过程如下:

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

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

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

在这个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。在实际应用中,要根据情况使用,也可以同时使用加密和签名,比如A和B都有一套自己的公钥和私钥,当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。

简单来说:「公钥加密、私钥解密、私钥签名、公钥验签」

为了方便大家使用,已开源并打包发布至Maven中央库供大家学习交流

1.介绍

rsa-encrypt-body-spring-boot

Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密

2.使用方法

Apache Maven

代码语言:java
复制
<dependency>  
    <groupId>cn.shuibo</groupId>  
    <artifactId>rsa-encrypt-body-spring-boot</artifactId>  
    <version>1.0.1.RELEASE</version>
</dependency>

Gradle Groovy DSL

代码语言:java
复制
implementation 'cn.shuibo:rsa-encrypt-body-spring-boot:1.0.1.RELEASE'

以Maven为例,在pom.xml中引入依赖

代码语言:java
复制
<dependency>
    <groupId>cn.shuibo</groupId>
    <artifactId>rsa-encrypt-body-spring-boot</artifactId>    
    <version>1.0.1.RELEASE</version>
</dependency>

启动类Application中添加@EnableSecurity注解

代码语言:java
复制
@SpringBootApplication
@EnableSecurity
public class DemoApplication {    
    public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
    }
}

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

代码语言:java
复制
rsa:
  encrypt:
      open: true # 是否开启加密 true  or  false    
      showLog: true # 是否打印加解密log true  or  false    
      publicKey: # RSA公钥    
      privateKey: # RSA私钥

对返回值进行加密

代码语言:java
复制
@Encrypt
@GetMapping("/encryption")
public TestBean encryption(){    
    TestBean testBean = new TestBean();    
    testBean.setName("shuibo.cn");    
    testBean.setAge(18);    
    return testBean;
}

对传过来的加密参数解密

代码语言:java
复制
@Decrypt
@PostMapping("/decryption")
public String Decryption(@RequestBody TestBean testBean){
    return testBean.toString();
}

接口经过加密解密操作之后可以看出我们的接口如果没有私钥别人无法解密,更无法窥探传输的参数值,对接口参数裸漏起到一定的保护作用,是接口更安全,应用场景:安全级别高项目以及日常防止薅羊毛等。

注意事项:

  1. 目前版本只支持前端传值方式为JSON传值方式:application/json;charset=utf-8

2. 密钥对必须生成RSA密钥对,不是乱填就行(很多人犯这个错)

3. 如若实在解决不了,可关注公众号:开心码农,回复RSA加密,获取加群方式。

开源仓库地址

  • https://gitee.com/ishuibo/rsa-encrypt-body-spring-boot

完整DEMO示例

  • https://github.com/ishuibo/SpringAll/tree/master/05.Spring-Boot-RSA

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是RSA加密
  • 1.介绍
  • 2.使用方法
  • 注意事项:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档