Webhook
- WaaS 回调机制总览
- 回调接入准备说明
- 回调数据解密实现
- 回调枚举类型说明
- 公共请求参数
- Webhook API
核心工具类
RSAUtils
用于RSA公钥加密和解密的工具类
概述
RSAUtils
是实现RSA公钥加密和解密的工具类,采用非对称加密算法保障数据传输安全。在API通信中,用于对敏感业务数据进行加密传输,以及解密服务器返回的加密数据。
代码实例
Copy
import javax.crypto.Cipher;
import java.security.Key;
import java.security.KeyFactory;
import java.security.spec.X509EncodedKeySpec;
/**
* RSA公钥加解密工具类
* <p>
* 提供基于公钥的非对称加密解密功能,
* 适用于API通信中的数据加密传输。
*/
public class RSAUtils {
// RSA加密最大块大小(单位:字节)
private static final int MAX_ENCRYPT_BLOCK = 117;
/**
* 使用公钥加密数据
*
* @param data 原始二进制数据
* @param publicKey Base64编码的公钥字符串
* @return 加密后的二进制数据
*
* 使用场景:在发送API请求前,加密业务数据。
* 自动处理大数据的分段加密(117字节/块)。
*
* 示例:
* byte[] encrypted = RSAUtils.encryptByPublicKey(
* jsonData.getBytes(),
* "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ..."
* );
*/
public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception {
// 1. Base64解码公钥
byte[] keyBytes = Base64Util.decodeString(publicKey);
// 2. 生成公钥对象
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key publicK = keyFactory.generatePublic(
new X509EncodedKeySpec(keyBytes)
);
// 3. 创建并初始化加密器
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicK);
// 4. 分段加密处理大数据
int inputLen = data.length;
int offset = 0;
java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
while (inputLen - offset > 0) {
int blockSize = Math.min(inputLen - offset, MAX_ENCRYPT_BLOCK);
byte[] encryptedBlock = cipher.doFinal(data, offset, blockSize);
out.write(encryptedBlock, 0, encryptedBlock.length);
offset += blockSize;
}
return out.toByteArray();
}
/**
* 使用公钥解密数据
*
* @param encryptedData 加密后的二进制数据
* @param publicKey Base64编码的公钥字符串
* @return 解密后的原始二进制数据
*
* 使用场景:解密API返回的加密数据。
* 适用于小数据块的一次性解密操作。
*
* 示例:
* byte[] decrypted = RSAUtils.decryptByPublicKey(
* encryptedBytes,
* "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ..."
* );
*/
public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey) throws Exception {
// 1. Base64解码公钥
byte[] keyBytes = Base64Util.decodeString(publicKey);
// 2. 生成公钥对象
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key publicK = keyFactory.generatePublic(
new X509EncodedKeySpec(keyBytes)
);
// 3. 创建并初始化解密器
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicK);
// 4. 一次性解密(适合小数据)
return cipher.doFinal(encryptedData);
}
}
助手
Responses are generated using AI and may contain mistakes.