RSA签名(0-1)调试过程

RSA 加密使用记录 过程中遇到的问题

##(问题都是小白不懂 一起调试完毕)
首先接口文档中明确指出要使用RSA加密传输 并且data形式传递数据、

在调试时发现我们这是用的RSA签名 :
所以签名只需要 对数据进行签名 拿到数据进行验签就行(一般都是私钥签名 公钥来验签)
而加密是对传输数据进行加密 接受到的数据进行解密处理 (一般都是公钥加密 私钥解密)

这是具体签名和加密的区别很详细:
https://blog.csdn.net/weixin_30827565/article/details/99735869

第一步 需要调试RSA签名 对传输的JSON数据进行打包签名
(这边调试只能对数据签名之后进行验证 通过接口响应来判断是否签名成功)
调试使用的私钥是后台人员给的用来签名
调试过程中知道签名有对应的签名算法的:

Signature Sign = Signature.getInstance(SIGNATURE_ALGORITHM);
//SIGNATURE_ALGORITHM  这里就是SHA256withRSA

SHA224withRSA
SHA256withRSA
SHA384withRSA
SHA512withRSA
RIPEMD128withRSA
RIPEMD160withRSA

我调试使用的SHA256withRSA 签名算法在调接口时成功地,这就已经成功一半了 , 然后进行数据验签
(验签过程就好说了 ,只需要对接口响应的签名数据 进行验签就行 结果为true就OK)
注意:签名是用什么签名算法 验签也得使用相应的算法 所以我验签也是用SHA256withRSA

贴代码:
签名代码----------


 
    /**
     * 私钥签名
     *requestData  传递给接口的data数据  以json数据传递
     *
     * */
    public static String signRSA(String requestData){
        String signature =null;
        byte[] signed =null;
        try{
            PrivateKey privateKey =getPrivateKey();
            Signature Sign = Signature.getInstance(SIGNATURE_ALGORITHM);
            //SIGNATURE_ALGORITHM  签名算法 SHA256withRSA
            Sign.initSign(privateKey);
            Sign.update(requestData.getBytes());
            signed = Sign.sign();
//            signature = Base64.getEncoder().encodeToString(signed);
            signature = Base64Util.encode(signed);//注意: 我们义务需求需要签名后进行base64编码  所以这段可根据具体使用情况
            System.out.println("===签名结果:"+signature);
        }catch(Exception e){
            e.printStackTrace();
        }
        return signature;
    }

验签代码----------

    /**
     *
     * 公钥验签
     *
     * */
    /**
     * 通过公钥验签
     * @param content 验签内容(json数据)
     * @param sign  签名
     * @return 验签结果
     */
    public static boolean verifySignByPublicKey(String content, String sign) {
        try {
            PublicKey pubKey = getPublicKey();//公钥验签
            Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
            signature.initVerify(pubKey);
            signature.update(content.getBytes(StandardCharsets.UTF_8));
            return signature.verify(Base64.decodeBase64(sign.getBytes(StandardCharsets.UTF_8)));
        } catch (Exception e) {
//            log.warn("sign error, content: {}, sign: {}, pubKey: {}", content, sign, publicKey);
//            log.error("sign error", e);
        }
        return false;
    }

这就是我调试时的一个过程,其实第一次过程也是很坎坷的,看着没有一点技术含量的东西,但是第一次搞从0开始 后面可能会遇到更多的场景 就稍微有点经验了。

小白在不断发展中 希望一起加油吧!!!!
有大佬有什么好的建议和指导欢迎留下言哈, 谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值