常用的加密方式
常见的加密方式包括对称加密和非对称加密。
- 对称加密:对称加密也称为共享密钥加密,使用相同的密钥进行加密和解密。由于加密和解密都使用相同的密钥,因此对称加密算法的加密和解密速度都很快。常见的对称加密算法包括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);
}