SpringBoot-RSA加密
前言
最近由于工作业务的需要,需要对指定的字段信息进行非对称加解密;由于需要加密的内容过于庞大;自己执行程序会出现:Data must not be longer than 117 bytes 的异常错误;现在自己将自己的解决方法总结如下;
一、配置文件准备
spring:
profiles:
active: dev
---
spring:
profiles: dev salary:
rsa-key: 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 ---
spring:
profiles: prod salary:
rsa-key: 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
二、对配置文件中的rsa-key属性获取
@ConfigurationProperties("salary")
@Component
public class RsaConfig { private String rsaKey; public String getRsaKey() {
return rsaKey;
} public void setRsaKey(String rsaKey) {
this.rsaKey = rsaKey;
}
}
三、RSAUtil工具类的编写
import com.tencent.citybase.generated.bridge.utils.SpringContextUtils;
import com.tencent.citybase.generated.extend.config.RsaConfig;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map; /**
* @Description RAS加密工具类
* @Author songwp
* @Date 2022/8/8 20:34
* @Version 1.0.0
**/
public class RSAUtil {
protected static Logger log = LoggerFactory.getLogger(RSAUtil.class); private static final String KEY_ALGORITHM = "RSA";
//密钥长度
private static final int KEY_SIZE = 4096; //最大加密长度
private static final int MAX_ENCRYPT_BLOCK = KEY_SIZE / 8 -11;
//最大解密长度
private static final int MAX_DECRYPT_BLOCK = KEY_SIZE / 8; private static String getRsaKey() {
return SpringContextUtils.getBean(RsaConfig.class).getRsaKey();
} private static byte[] decryptBASE64(String src) {
BASE64Decoder decoder = new BASE64Decoder();
try {
return decoder.decodeBuffer(src);
} catch (Exception ex) {
return null;
}
} /**
* 生成公私钥
*
* @param keySize 密钥长度
*/
public static Map<String, String> genKeyPair(int keySize) {
Map<String, String> keyMap = new HashMap<>();
try {
//创建密钥对生成器
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(keySize);
//生成密钥对
KeyPair keyPair = kpg.generateKeyPair();
//公钥
PublicKey publicKey = keyPair.getPublic();
//私钥
PrivateKey privateKey = keyPair.getPrivate();
keyMap.put("publicKey", Base64.encodeBase64String(publicKey.getEncoded()));
keyMap.put("privateKey", Base64.encodeBase64String(privateKey.getEncoded()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
log.error("生成公私钥信息失败:"+e.getMessage());
}
return keyMap;
} /**
* 该base64方法会自动换行
* @param src
* @return
*/
private static String encryptBASE64(byte[] src) {
BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(src);
}
/**
* 公钥分段加密
* @param data 源数据
* @param publicKey 公钥(BASE64编码)
* @param length 段长
* @return
* @throws Exception
*/
private static byte[] encryptByPublicKey(byte[] data, String publicKey,int length) {
ByteArrayOutputStream out = null;
byte[] encryptData = null;
try {
byte[] keyBytes = decryptBASE64(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key publicK = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicK);
int inputLen = data.length;
out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > length) {
cache = cipher.doFinal(data, offSet, length);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * length;
}
encryptData = out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
log.error("公钥分段加密失败:"+e.getMessage());
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return encryptData;
} /** *//**
* <P>
* 私钥解密
* </p>
*
* @param data 已加密数据
* @param privateKey 私钥(BASE64编码)
* @return
* @throws Exception
*/
private static byte[] decryptByPrivateKey(byte[] data, String privateKey,int length){
ByteArrayOutputStream out = null;
byte[] decryptedData = null;
try {
byte[] keyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateK);
int inputLen = data.length;
out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > length) {
cache = cipher.doFinal(data, offSet, length);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * length;
}
decryptedData = out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
log.error("私钥解密失败:"+e.getMessage());
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return decryptedData;
} /**
* 加密
* @param data
* @param publicKey
* @return
*/
public static String encryptByPublicKey(String data, String publicKey) {
//log.info("公钥分段加密内容:"+new String(encryptByPublicKey(data.getBytes(), publicKey, MAX_ENCRYPT_BLOCK)).replaceAll("[+]", "@"));
return encryptBASE64(encryptByPublicKey(data.getBytes(), publicKey, MAX_ENCRYPT_BLOCK)).replaceAll("[+]", "@");
} /**
* 解密
* @param data
* @return
*/
public static String decryptByPrivateKey(String data) {
//log.info("私钥解密内容:"+new String(decryptByPrivateKey(decryptBASE64(data.replaceAll("@", "+")), getRsaKey(), MAX_DECRYPT_BLOCK)));
return new String(decryptByPrivateKey(decryptBASE64(data.replaceAll("@", "+")), getRsaKey(), MAX_DECRYPT_BLOCK));
}
public static void main(String[] args) {
Map<String, String> keyMap = genKeyPair(KEY_SIZE); System.out.println("公钥======"+keyMap.get("publicKey"));
System.out.println("私钥======"+keyMap.get("privateKey"));
String encryptString = encryptByPublicKey("{\\\"allBillList\\\":[{\\\"id\\\":\\\"264786\\\",\\\"billNo\\\":\\\"WB2021051700064\\\",\\\"billTypeId\\\":13,\\\"billTypeName\\\":\\\"定损维修\\\",\\\"vehicleNo\\\":\\\"京Q683976\\\",\\\"vehicleId\\\":\\\"532928\\\",\\\"vehicleOwner\\\":\\\"北京测试公司\\\",\\\"vehicleModelName\\\":\\\"宝马\\\",\\\"orderCar\\\":0,\\\"orderCarName\\\":\\\"短租\\\",\\\"cityId\\\":null,\\\"cityName\\\":\\\"北京\\\",\\\"deptId\\\":null,\\\"deptName\\\":\\\"北京测试\\\",\\\"nowCityId\\\":null,\\\"nowCityName\\\":null,\\\"nowDeptId\\\":null,\\\"nowDeptName\\\":null,\\\"belongCityId\\\":null,\\\"belongCityName\\\":\\\"北京\\\",\\\"belongDeptId\\\":null,\\\"belongDeptName\\\":\\\"知春路店\\\",\\\"costBelongAreaName\\\":\\\"知春路大片区\\\",\\\"costBelongCityName\\\":\\\"北京\\\",\\\"costBelongDeptName\\\":\\\"知春路店\\\",\\\"createTime\\\":\\\"2021-05-17 10:11\\\",\\\"modifyTime\\\":null,\\\"billStatusId\\\":109,\\\"billStatusName\\\":\\\"方案已通过\\\",\\\"createEmpName\\\":\\\"JD\\\",\\\"createEmpDeptName\\\":\\\"北京测试\\\",\\\"pickupType\\\":2,\\\"pickupTypeName\\\":\\\"上门\\\",\\\"isDelete\\\":0,\\\"isDeleteeName\\\":\\\"否\\\",\\\"garageId\\\":null}],\\\"totalCount\\\":1}\";\n","MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnvGvwKuIfZdWilPI+nT/Pas1N6b3Jns7D9oK698h1j8yzmpD9KnM5hHCgl4toEVg4R4KEsJTTmUe9HU1dBTQby9TnBH5w5UeQgg/Mx5sJ3w5DyAPu2njOhU/5aoSInowpa5JLoba0YIzQWn++a/jhJs50T+Wt+xy3WEbF3QYN/Y7m0ZN1C70KXlX2xOLI8BL80BMqLF3Q1dIkvxLmxalJZiEnvkALWly8pERrvvz1YX6rKWOo1wtS5AJW1xrctnOf4saQi9/Jv0PRnkuFRo9BB1RZA/vV5kPt++szrCi7qDRCokAoQfn8enB1UJNED/tFWwqxpzZ+ic+C+FfLrxZ7nXocWMQWSojrIhY7+2TYT3fwO4ZvJoKlg71R6H+gSr2p0qBye+ELIeEr83UWMhvKrcAP0FpJcWpWpJaMKGo5yjUe4u7FBKF5j+O0GJCTfkxA8aw+KTZ/PnyoEI65PGD7i4XQWrvTPkyMcfMy9/dXd8efqzh5kg3kAauHvTBLcSpjRqCFT3pz6bK0azegrGPlIEPa3W5UzZ0MkhtM+6nbrOKgzuj27glwHRBNbhs8bllzVGU4+Zxv98lUp8VvPsVMweOHB4Zz/g+dLamHcMA0xLPPHZJRwvBbsm6rWd96Wcm0Y3ZyyIGMsj0AWPBjMvbHcBCJDFTxIMZ9GOAIMuU+lcCAwEAAQ==");
System.out.println("密文======"+encryptString); String decryptString = decryptByPrivateKey(encryptString);
System.out.println("明文======"+decryptString);
}
}
四、main方法测试结果:
公钥======MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkFPpOKpa55rDkPMHuYcpy14rmuAv8Jn+kIwB81vzo154z+6yuzmxA9/7g/SQtZgkxsV323h3D6j1jYVMy+234noqx8Bj0UDVwrfFoG/M9mLnU/y5+CdlwGtVMTlfopfBsgZdJXQ72UpkFbVu87Ak7MwS95z3x7FtS4VlITcSM8tDs+qpmeMcbnVyCEyhKaxcqYyMvLwMqP4tE5UGH5YVBPBzfD4cKj/zXPqKAPhpQ+rtV/UBwgr+uS98Og07G1+KEjOd8aHbhksnLrNX1vz+WroR2sem14ke82k5VwAr5khb2bgeMsgwYCNB2yKOyYVfPq+13djAG2VR2TBCfQMm4WEI8rA54oKUDSi6XrYlH6ia+j0QXgmkF2dbj6zD8WGxfuIpfMxCHuPj5JvDgohxAMHT9KjxxVD9j5p48E8f3If2Vy6sOK236jmjko1/RXGS0TkfztIaQSFbDR2j9YFehMv906gK4D9VSYrIICgAptRHqpXCLEYAuvyuqla0YRhOuk6teHJHzxdX3B+JRiYNIN+ZEMrZ4weoxseLQvcFQaC2uM7Qu5gxHHk3t2MxHCMOWhTgPeHqcExnIAdW7XrnxO8b7wAr7CXLVZ92QYxg1zopV7shc0hWY03jdDAiyFCD5ZcQ1tMmRo9jqiL72OKOdJbZdBOoAoLw7zMvNADIAgMCAwEAAQ==
私钥======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
密文======OjMN2ywgRMMO2BrC+jNQKUo+FZaHe+G5qCVzsTA/rxqOLi6w8WrmVBvkeAU25fBFZSthovPZ9hC7Bmx+tpyNRVuqwquVmIxSzxFj9IifArzaaHGy/Fwd74B7zTjVRnP/oNmgz798Cg2Xrj7mM8JCoes+ZwHpBPVk49JFtdjwgMmyIz1zosqxUQNGUqP7MpEo2kbA85RBbjAH7Mo1RliUiOH7QqraJzroMTY/uExyAD3SVb4jmdANYIS2bx5IE6LHXKiBhvixWjQwEbLLGVHGcqxhl6y4THrj9Lx490nht0p9FF0BMboXtedYtxrYY7EwxGb/tdA88Sp0BDvBHW2A1ej+1i3FbEynwqXIMl3o2AFTucn62V6dO6lrHMzhrbQS1Ojx8JXGcS8X1ieEHKjwX/rdKPqGH/Ei5jdBEmxBQSJlzM++OGGqthq2GllBKB/jRKfiXw6YMtsoL0LQmG+hG0T3ALV2vepf9DR95OhQ9No+tO6VFpi9xYcUEGR7Uj2gy9x91JtPu71Nwxp5zoXb2GyQ3CFOGRKubWvcchaPpJXkwDkchQeaix5nwpvweZK+qN4X5uVvkpLSp9BpMLoNIE3ZI4MjI3bUBI3cUYPP9C3C2ZPJbzrwq2FXH4drnouKCG+IgPYVmbAgRt/W5Xm8FBc3WUfSbT535Q1NBfJ6ekcrp9cCW/MzVlKWQYpwAjGR/5pB2OxO7vihiuhDa28O1tyx2PtWTrnLwDM0P0hlY/b2lxKSJAIcjgKMVbSB/hqmy6jkA/s62uqNWSaAKYjhGuzsFT3Ogud/lExPfE+wEqSBq+VJkcIMFKWH4y689UJd5O2K9F2lXIworkYlsPm1BIHFLYJNzYyOMrXBQeP+Y+3NuNo+PeyJdbseDk2m5iwXcI7vqg+Vs1NHdJqHPzNtKmIlAbnIwr0jjtAUqbOUVfx/retMA3j07hepNQxmkjm5HbEFBUdniSCpOi/+ajQpKjZTDZpbZ18GjBeLjYldavfC5dqj9EYFjMq6JmJ4Q3M+i2gHHMnEEiA81szhrdCYZRjviRfOWlyFELdxoyKqQf6Qi7ozRucEioKQzkArVVVS32JYssBJ57DyuO+hoDK/UBEinU3xsl38WRQZHdzIYL6sRJ2F0uE1VcGWKAA4WmxZtsQT1CYwtq+0/dRbzburHq9R97kZbUWShrkBaDEERI/DvWsdzZVNQhhVpKS/C/B5jiGXJ4hHHqaSg+ujMws0AP/D1o2DylG8a1D/z9Qnl0yQ/pdvSyl36DSKeulzgFNIQ4F7fUX1DI489ebUgE8q5Reja64TwYiolmC6hTHVVW9+llHkOYGiBA9/fT2BRyyXBXjm/wVFqWRGXWwLgD04bw==
明文======{\"allBillList\":[{\"id\":\"264786\",\"billNo\":\"WB2021051700064\",\"billTypeId\":13,\"billTypeName\":\"定损维修\",\"vehicleNo\":\"京Q683976\",\"vehicleId\":\"532928\",\"vehicleOwner\":\"北京测试公司\",\"vehicleModelName\":\"宝马\",\"orderCar\":0,\"orderCarName\":\"短租\",\"cityId\":null,\"cityName\":\"北京\",\"deptId\":null,\"deptName\":\"北京测试\",\"nowCityId\":null,\"nowCityName\":null,\"nowDeptId\":null,\"nowDeptName\":null,\"belongCityId\":null,\"belongCityName\":\"北京\",\"belongDeptId\":null,\"belongDeptName\":\"知春路店\",\"costBelongAreaName\":\"知春路大片区\",\"costBelongCityName\":\"北京\",\"costBelongDeptName\":\"知春路店\",\"createTime\":\"2021-05-17 10:11\",\"modifyTime\":null,\"billStatusId\":109,\"billStatusName\":\"方案已通过\",\"createEmpName\":\"JD\",\"createEmpDeptName\":\"北京测试\",\"pickupType\":2,\"pickupTypeName\":\"上门\",\"isDelete\":0,\"isDeleteeName\":\"否\",\"garageId\":null}],\"totalCount\":1}";
SpringBoot-RSA加密的更多相关文章
- “不给力啊,老湿!”:RSA加密与破解
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...
- .NET 对接JAVA 使用Modulus,Exponent RSA 加密
最近有一个工作是需要把数据用RSA发送给Java 虽然一开始标准公钥 net和Java RSA填充的一些算法不一样 但是后来这个坑也补的差不多了 具体可以参考 http://www.cnblogs. ...
- Android数据加密之Rsa加密
前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- RSA加密例子和中途遇到的问题
在进行RSA加密例子 package test; import java.io.IOException; import java.security.Key; import java.security. ...
- iOS中RSA加密详解
先贴出代码的地址,做个说明,因为RSA加密在iOS的代码比较少,网上开源的也很少,最多的才8个星星.使用过程中发现有错误.然后我做了修正,和另一个库进行了整合,然后将其支持CocoaPod. http ...
- iOS动态部署之RSA加密传输Patch补丁
概要:这一篇博客主要说明下iOS客户端动态部署方案中,patch(补丁)是如何比较安全的加载到客户端中. 在整个过程中,需要使用RSA来加密(你可以选择其它的非对称加密算法),MD5来做校验(同样,你 ...
- Java使用RSA加密解密及签名校验
该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行 ...
- 基于OpenSLL的RSA加密应用(非算法)
基于OpenSLL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- 通过ios实现RSA加密和解密
在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...
随机推荐
- Python连接mysql数据库和关闭数据库的方法
1 import pymysql 2 def get_conn(): 3 """ 4 :return: 连接,游标 5 """ 6 # 创建 ...
- 15 JavaScript ES6中的箭头函数
15 JavaScript ES6中的箭头函数 什么是箭头函数 ES6中允许使用=>来定义函数.箭头函数相当于匿名函数,并简化了函数定义. 基本语法 // 箭头函数 let fn = (name ...
- Spring反序列化JNDI分析
漏洞原理 Spring框架的JtaTransactionManager类中重写了readObject方法,这个方法最终会调用到JNDI中的lookup()方法,关键是里面的参数可控,这就导致了攻击者可 ...
- 自动编号工具类:NumAutoUtils详解
在软件开发中,经常需要生成唯一的编号,例如订单号.发票号.实验编号等.为了简化这一过程,本文将介绍一个Java工具类NumAutoUtils,它可以帮助我们生成带有前缀和日期的自动编号. 概述 Num ...
- Djangorestframework 记录一个报错 -- rest_framework.authentication.ToKenAuthentication
今天在使用 Djangorestframework 这个框架时,发生报错: ImportError: Could not import 'rest_framework.authentication.T ...
- PMF源解析技术在大气颗粒物与VOCs研究中的创新应用
目前,大气颗粒物和臭氧污染成为我国亟待解决的环境问题.颗粒物和臭氧污染不仅对气候和环境有重要影响,而且对人体健康有严重损害.而臭氧的前体物之一为挥发性有机物(VOCs).为了高效.精准地治理区域大气颗 ...
- 《深入理解Java虚拟机》读书笔记:HotSpot的算法实现
HotSpot的算法实现 HotSpot的算法实现概要 1.枚举根节点 由于目前的主流Java虚拟机使用的都是准确式GC(这个概念在第1章介绍Exact VM对Classic VM的改进时讲过),所以 ...
- 在HarmonyOS上使用ArkUI实现计步器应用
介绍 本篇Codelab使用ArkTS语言实现计步器应用,应用主要包括计步传感器.定位服务和后台任务功能: 1. 通过订阅计步器传感器获取计步器数据,处理后显示. 2. 通过订阅位置服务获取位 ...
- HTTP 使用指南
0x1 初识 HTTP 协议 网页加载流程 graph LR A(user 输入网址)==>B(browser 进程) B==>C(处理输入信息) B-->D(页面加载完成) C== ...
- vscode 编写node的c++ 扩展
前言 在此介绍一下node的c++扩展在vscode 上的编译环境,在此不多说,比较完善,看了肯定明白. 正文 c++ 环境搭建 下载mingw,然后配置好环境.下载地址为,官网,可以自己百度一下. ...