Java接口请求加密验签处理
最近做了一个接口的加密验签的功能,今天和大家分享一下
***注(以下出现的参数字符串都是测试处理,方便大家理清思路,非真实正确的数据)***
1、参数说明
字段名称:appcode(产品编码)、servercode(业务编码)、redirect(业务跳转地址)、timestamp(时间)、addParas(附属参数)、sign(签名)。
2、sign签名计算规则
采用md5加密方法,参与计算的参数为上述的appcode、servercode、redirectURL、timestamp、addParas。
3、加密策略
秘钥:XA12#Da
3.1、所有参数组成字符串params
appcode=hsh&servercode=HSH_MMS,hsh10120013,HSH_05_MMS&redirectURL=hsh.12580.com×tamp=20200220112501&addParas={datasource:163__table}3.2、将所有参数组成字符串按照字典序排序形成sortParams(即字符串string1)
Map<String, String> sortParams = new TreeMap<String, String>(params);
addParas={datasource:163__table}&appcode=hsh&redirectURL=hsh.12580.com&servercode=HSH_MMS,hsh10120013,HSH_05_MMS×tamp=202002201125013.3、将上述字符串(string1) + 秘钥生成新的字符串(即string2)
addParas={datasource:163__table}&appcode=hsh&redirectURL=hsh.12580.com&servercode=HSH_MMS,hsh10120013,HSH_05_MMS×tamp=20200220112501&appkey=XA89aD#a3.4、将string2进行md5生成sign签名
md5(string2)
4、组合参数
4.1、将上述MD5计算的sign值和所有参数addParas、appcode、redirectURL、servicecode、timestamp组合成字符串
"addParas={\"datasource\":\"163__table\"}&appcode=hsh&redirectURL=hsh.12580.com&servercode=HSH_MMS,hsh10120013,HSH_05_MMS×tamp=20200220112501&sign=4bb716352db6400bc1c8ec9f01424ee0"4.2、将上述字符串使用base64Util进行加密得到密文然后传输
YWRkUGFyYXM9eyJkYXRhc291cmNlIjoiMTYzX190YWJsZSJ9JmFwcGNvZGU9aHNoJmlmU3Vic2NyaWJlPTEmcmVkaXJlY3RVUkw9aHNoLjEyNTgwLmNvbSZzZXJ2ZXJjb2RlPUhTSF9NTVMsaHNoMTAxMjAwMTMsSFNIXzA1X01NUyZ0aW1lc3RhbXA9MjAyMDAyMjAxMTI1MDEmc2lnbj00YmI3MTYzNTJkYjY0MDBiYzFjOGVjOWYwMTQyNGVlMA==
5、接收方处理
1、现将url后面的加密参数进行base64解密处理
2、解密处理后得到所有的参数(appcode、servercode、redirectURL、timestamp、addParas、sign)
3、将参数(appcode、servercode、redirectURL、timestamp、addParas)进行上述第三步的加密处理生成新的sign值
4、校验解密后sign值和获取参数生成的新sign值做出判断是否相等