加盐MD5的sign签名

本文介绍了API调用中防止数据被篡改的重要手段——加盐MD5签名。详细阐述了签名的目的,规则,以及具体的签名算法步骤,包括参数排序、拼接、使用MD5算法及盐值的加入,确保请求的安全性。
摘要由CSDN通过智能技术生成

为什么要签名?

为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝

签名规则

  • 线下分配sysKey/secret,由openAPI管理员分配
  • timestamp时间戳校验,例如:30分钟数据有效
  • sign,所有body+parameter 数据的签名信息
    以上加粗字段为公共参数
    例如分配的sysKey是 li1234, secret是 1234567890

签名算法

• 对URL里的请求参数(包括公共参数和业务参数,但除去sign参数和File, byte[]类型的参数,不包括body里的参数),根据参数名称的ASCII码表的顺序排序。如:foo=1, bar=2, foo_bar=3, foobar=4排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4。
• 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4。
• 包含Body(JSON)参数的请求,需要将json的key按ASCII排序(每一级的key都需要排序),再转为字符串,例如:

{“b”:2, “d”:4, “a”:1, “c”:{
“g”:7,
“e”:5,
“f”:6 }}

排序后,变成

{ “a”:1, “b”:2, “c”:{
“e”:5,
“f”:6,
“g”:7 }, “d”:4 }

• 把排序后body参数串在一起,用#分割:bar2foo1foo_bar3foobar4#{“a”:1,“b”:2,“c”:{“e”:5,“f”:6,“g”:7},“d”:4}
• 把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要。如果使用MD5算法,则需要在拼装的字符串前后加上app的secret后,再进行摘要,如:md5(secret+bar2foo1foo_bar3foobar4#{“a”:1,“b”:2,“c”:{“e”:5,“f”:6,“g”:7},“d”:4}+secret);
• 将摘要得到的字节流结果使用十六进制表示,如:hex(“helloworld”.getBytes(“utf-8”)) = “68656C6C6F776F726C64”

算法代码

/**
    * 包含body、params 计算签名
    * @param signMethod
    * @param body
    * @param params
    * @param secret
    * @return
    */
   public static String getSign(Object body, Map<String, Object> params, String secret) {
   
       StringBuilder sb = new StringBuilder();
       // md5加密 参数前加上secret
       sb.append(secret);
       if (!CollectionUtils.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值