RSA 加密 签名

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.后记
工作中遇到了需要加密,签名的场景,写一篇文章记录 分享一下.如果觉得对你有帮助,就点赞支持一下,后面我会继续分享一些案例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值