1. RSA加密
RSA加密是一种非对称加密.可以在不知道密钥的情况下,完成解密.它是由一对密钥组成的,分别称为公钥和私钥. 私钥是个人保存的,公钥是公开的
2. RSA加密,签名的区别
加密的目的是防止信息泄露,签名的目的是保证信息完整性.
下面举个例子:
加密:机构A要往银行存钱,这个时候A往银行发送存钱请求,
这个时候因为请求中有敏感信息,所以使用银行公布在外面的公钥加密,
而银行在收到A的请求后,使用自己的私钥解密,这个时候就能看到请求数据.
签名:还是刚才的例子,A往银行发送存钱请求的时候,出于防止内容被篡改的目的,
A使用了自己的私钥加签,而银行收到A的请求后,使用A公布在外的公钥验签,
保证数据完整性.
总结: 公钥加密、私钥解密、私钥签名、公钥验签
3. 代码示例
String platformPubKey = "XXX";
String agentPubKey = "XXX";
String agentPriKey = "XXX";
// 1. 原始请求数据
String reqdata = "XXX";
// 2. 加密敏感字段
JSONObject jsonObject = JSONUtil.toBean(reqdata, JSONObject.class);
JSONObject data = jsonObject.getJSONObject("data");
for (String key : data.keySet()) {
if (key.endsWith("Enc") && !CharSequenceUtil.isBlank(data.getStr(key))) {
try {
String encryptedValue = SignUtil.encryptByPublicKey(data.getStr(key), platformPubKey);
data.set(key, encryptedValue); // 替换为加密后的值
} catch (Exception e) {
log.error("加密失败: {}", key, e);
}
}
}
jsonObject.set("data", data); // 更新加密后的 data
// 3. 加签
String updatedReqData = jsonObject.toString();
String sign = sign(updatedReqData, agentPriKey);
jsonObject.set("sign", sign);
// 4. 请求
String finalRequest = jsonObject.toString();
log.info("请求数据: {}", finalRequest);
4.后记
工作中遇到了需要加密,签名的场景,写一篇文章记录 分享一下.如果觉得对你有帮助,就点赞支持一下,后面我会继续分享一些案例。