BAT|BAT HTTP接口安全规范调查
今天在看书的时候,看到一句话觉得很有道理:“尽量通过读取协议头来获取有用的信息”,就萌生了一个想法,BAT公司提供的服务接口,有哪些信息是放到头部的?百度
- OCR接口:appkey放header里面,没有参数校验码;
- 百度钱包支付接口:商户号、编码字符集、加密算法、接口版本、sign都放post中;
没有使用的参数不参与加密,且不需要传;
- 支付宝接口:商户号、编码字符集、加密算法、sign都放post中;
没有值的参数无需传递,也无需包含到待签名数据中; - MNS通知接口:消息ID放header中,md5加密校验码在post里面;
支持json和xml两种格式;
- 微信支付接口:公众号ID、商户号、sign都放post中;
编码只支持UTF-8;xml格式;
- 签名(sign)规则基本都一样,对这个有兴趣的可以参考后面的附录;
- 商户号、签名都是放到post消息体中;
- 基本上没有往header里面放数据的
格式(即 key1=value1&key2=value2…)拼接成字符串 string1,注意:值为空的参数丌参不
签名;
b.在 string1 最后拼接上 key=Key(商户支付密钥)得到 stringSignTemp 字符串,幵对
stringSignTemp 进行 md5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值
signValue。
假设以下为 package 传入参数:
appid=wxd930ea5d5a258f4f
auth_code=123456
body=test
device_info=123
mch_id=1900000109
nonce_str=960f228109051b9969f76c82bde183ac
out_trade_no=1400755861
spbill_create_ip=127.0.0.1
total_fee=1
key=8934e7d15453e97507ef794cf7b0519d
i:经过 a 过程 URL 键值对字典序排序后的字符串 string1 为:
appid=wxd930ea5d5a258f4f&auth_code=123456&body=test&device_info=123&mch_id=1900000109&nonce_str=960f228109051b9969f76c82bde183ac&out_trade_no=1400755861&spbill_create_ip=127.0.0.1&total_fee=1
【BAT|BAT HTTP接口安全规范调查】ii:经过 b 过程后得到 sign 为:
sign
=md5(string1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase
=md5(appid=wxd930ea5d5a258f4f&auth_code=123456&body=test&device_info=123&mch_id=1900000109&nonce_str=960f228109051b9969f76c82bde183ac&out_trade_no=1400755861&spbill_create_ip=127.0.0.1&total_fee=1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase()
="c380bec2bfd727a4b6845133519f3ad6".toUpperCase()
="C380BEC2BFD727A4B6845133519F3AD6"
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 2020-04-07vue中Axios的封装和API接口的管理
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 画解算法(1.|画解算法:1. 两数之和)
- 调取接口时报404错误(ID:16)