api接口文档中的签名是什么


前言

初入程序员行列,随着工作的不断展开,我对业务上的逻辑也逐渐熟悉。在开发过程中少不了看api文档,文档中常常又少不了签名,本文就介绍了我对API文档规则中签名的认识。


一、api文档中的签名是什么?

签名是一个参数sign,一般开发者会给出指定的签名算法,然后还会提供私钥,并将私钥参与签名算法,生成最后的签名。签名会当作入参传入接口,接口内部会有相对应的签名算法进行校验,可以判断身份是否正确等等,签名是用于保证开放api接口的安全问题的。

二、对文档规则中的签名算法的认识

签名算法是这个api接口文档的开发者提供的一个sign签名参数的生成方法,也就是告诉你这个sign的参数是怎么生成的,只有生成了按照指定算法生成的sign并传入所调用的指定接口,才能通过签名校验去正常访问接口。
一般的签名算法都会有这么几步,如下:

  • 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  • 在stringA最后拼接上私钥得到字符串stringSignTemp;
  • 对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。

生成的签名参数长这样:4A5078DABBCE0D9C4E7668DACB96FF7A

三、生成签名的函数

提供一个生成签名的函数,可供参考,代码如下:

/*
     * @Date 2021/7/22 07:37
     * @Param [params, privateKey 私钥]
     * @Return java.lang.String
     * @Desc 签名生成方法
     *
     */
    public static String createSign(Map<String, String> params, String privateKey) {

        StringBuilder sb = new StringBuilder();
        // 将参数以参数名的字典升序排序
        Map<String, String> sortParams = new TreeMap<String, String>(params);
        // 遍历排序的字典,并拼接"key=value"格式
        for (Map.Entry<String, String> entry : sortParams.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue().trim();
            if (!StringUtils.isEmpty(value))
                sb.append("&").append(key).append("=").append(value);
        }
        String stringA = sb.toString().replaceFirst("&", "");
        String stringSignTemp = stringA + "&" + "key=" + privateKey;
        //将签名使用MD5加密并全部字母变为大写
        // String signValue = Md5Encrypt.md5(stringSignTemp).toUpperCase();
        String signValue = DigestUtils.md5Hex(stringSignTemp + getTimestamp()).toUpperCase();
        System.out.println("stringA+privateKey后MD5加密+转换全部大写生成sign为:" + signValue);
        return signValue;
    }

总结

签名其实就是一个字符串,只是需要按照文档的规则去生成而已。本文仅仅简单介绍了我对api文档规则中有关签名的认识,希望对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值