springboot项目实现实体类加密存库,解密返回给前端

简介: springboot项目实现实体类加密存库,解密返回给前端

常用的加密方式

常见的加密方式包括对称加密和非对称加密。

  • 对称加密:对称加密也称为共享密钥加密,使用相同的密钥进行加密和解密。由于加密和解密都使用相同的密钥,因此对称加密算法的加密和解密速度都很快。常见的对称加密算法包括AES、DES、3DES、Blowfish等。
  • 非对称加密:非对称加密也称为公钥加密,使用一对密钥进行加密和解密,包括公钥和私钥。公钥可以公开发布给其他人使用,而私钥只有持有者可以使用。非对称加密算法的加密和解密速度较慢,但是它提供了更好的安全性和可信度。常见的非对称加密算法包括RSA、DSA、ECC等。

除了对称加密和非对称加密,还有一些其他的加密方式,如哈希加密、混淆加密等,这些加密方式都有其特定的应用场景和优缺点。同时,为了提高加密的安全性,还可以将不同的加密方式组合起来使用,例如对称加密和非对称加密的组合、加密和数字签名的组合等。

利用RSA将JSON加密存到数据库

场景,对于一些重要的配置信息,比如支付宝扫码配置信息等,我们可以将这种配置信息作为一个实体,转为JSON存到数据库,定义一个biz_type作为类型区别,直接开干

1️⃣:首先引入hutool工具类

<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.7.17</version>
</dependency>

2️⃣:创建配置工具类(加密,解密)

package com.test.rsa.util;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
/**
 * @author xiaobo
 * @date 2023/3/22
 */
public class ConfigureRsaUtils {
    public static final String RSA_PRIVATE_KEY = "";
    public static final String RSA_PUBLIC_KEY = "";
    /**
     * description: 解密配置中的字符串
     *
     * @param configParam 配置文件中的加密字符串
     * @param beanClass   Bean对象
     * @return T
     * @author bo
     * @date 2023/3/22 3:05 PM
     */
    public static <T> T decryptConfigStr(String configParam, Class<T> beanClass) {
        RSA rsa = new RSA(RSA_PRIVATE_KEY, RSA_PUBLIC_KEY);
        String decryptStr = rsa.decryptStr(configParam, KeyType.PrivateKey);
        return JSONUtil.toBean(decryptStr, beanClass);
    }
    /**
     * description: 加密bean对象生成字符串
     *
     * @param object Bean对象
     * @return java.lang.String
     * @author bo
     * @date 2023/3/22 3:11 PM
     */
    public static String encryptConfigStr(Object object) {
        RSA rsa = new RSA(RSA_PRIVATE_KEY, RSA_PUBLIC_KEY);
        return rsa.encryptBase64(JSON.toJSONString(object), KeyType.PublicKey);
    }
}

ℹ️:这里的私密和公密可以直接利用hutool工具类生成

3️⃣:通过泛型获取实体VO对象

/**
* 获取配置实体的Vo对象
*/
public <T> T getConfigContentVo(Class<T> beanClass, String bizType) {
  SysConfig sysConfig = dao.selectOne(new QueryWrapper<SysConfig>().eq("biz_type", bizType));
  return ObjectUtil.isEmpty(sysConfig) ? null : ConfigureRsaUtils.decryptConfigStr(sysConfig.getConfigContent(), beanClass);
}
相关文章
|
6天前
|
前端开发
Github项目分享——免费的画图工具drow,最新前端面试题整理
Github项目分享——免费的画图工具drow,最新前端面试题整理
|
5天前
|
前端开发 JavaScript
【前端面试】this的指向_不爱吃糖的程序媛夏天,web前端面试项目中的问题包括
【前端面试】this的指向_不爱吃糖的程序媛夏天,web前端面试项目中的问题包括
|
5天前
|
JavaScript 前端开发 IDE
TypeScript在前端项目的渐进式采用策略
该文介绍了渐进式采用TypeScript在前端项目中的策略。首先,通过将JS文件扩展名改为TS并添加类型注解,如在`utils.js`中添加类型。接着,配置`tsconfig.json`,包括目标版本、模块系统、输出目录等。高级配置涉及路径别名、JSON导入、库文件等。然后,集成TypeScript到构建流程,如Webpack,安装`ts-loader`并调整配置。利用类型定义,包括安装第三方库的类型定义包,自定义类型定义或使用社区定义。最后,逐步迁移其他模块至TypeScript,强化类型检查,并确保IDE支持。
9 0
|
5天前
|
前端开发 JavaScript Java
《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园,前端开发新手项目
《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园,前端开发新手项目
|
5天前
|
前端开发 JavaScript Java
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
|
5天前
|
JSON JavaScript 前端开发
web前端 第一阶段面试题,2024年最新Web前端面试项目经验
web前端 第一阶段面试题,2024年最新Web前端面试项目经验
|
5天前
|
SQL Oracle 前端开发
Oracle效率分析,Github标星25K+超火的前端实战项目
Oracle效率分析,Github标星25K+超火的前端实战项目
|
6天前
|
消息中间件 前端开发 JavaScript
【前端】websocket 讲解与项目中的使用
【前端】websocket 讲解与项目中的使用
|
6天前
|
前端开发 JavaScript 测试技术
第八章(应用场景篇) 中大型项目的解构:从单体应用到微前端
第八章(应用场景篇) 中大型项目的解构:从单体应用到微前端
|
5天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战