一、加签的作用:
由于http请求的开放性,请求参数很容易被拦截篡改。
依照双方事先约定好的规则,请求方(前端)对数据进行加签,接口提供方(后端)则对签名进行验证,验证通过才能放行,进行后续的业务逻辑处理。
但是,加签和验签只能解决请求传输过程中参数篡改的问题,并不能解决敏感参数传输的安全性问题。
二、处理过程:
请求发送方:将请求参数加密后生成一个sign值,也放到请求参数里。
请求接收方:使用同样的规则,也对请求参数(不包括请求发送方放进来的sign值)加密后得到一个sign值。
如果两个sign值相同,就说明参数没有被篡改。
三、加签的步骤:
排序:将所有请求参数(除去值是空的参数),按照参数名 ASCII 字典序升序排序。
拼接:把排序后的参数按参数1值1参数2值2...参数n值n 的方式拼接成一个字符串。 可以按照
key=value或key:value的格式拼接。比如stringTemp = key1=value1&key2=value2&...&keyN=valueN添加密钥:把分配给接入方的验证密钥key拼接在第2步得到的字符串后面(由接口提供方即后端 分配给接口接入方的密钥key)。
stringTemp = stringTemp + "&key=xxxxxxxxx"加密:对stringTemp进行md5运算,得到32位字符串,然后转成大写,得到的字符串作为sign的值放到请求参数里。
sign = MD5(stringTemp).toUpperCase()
第3步可以不拼上密钥,第4步也可以使用HmacSHA256这种签名方式,由具体的约定规则决定。
注意:进行md5之前要确保请求发送方和接收方使用的字符串编码一致,比如统一使用utf-8编码。如果编码方式不一致,则计算出来的签名会校验失败。