在进行自定义验签算法之前,您应该已经理解系统
1、签名算法一(直接拼接时间戳+APP_KEY)
2、签名算法二(拼接所有的参数,字典排序法+APP_KEY)
自定义验签算法的目的是保持每个客户都有一套属于自己的唯一的签名算法规则,不必再遵循字典排序法或直接拼接,可以由客户自定义算法顺序/常量,从而保证签名的唯一性。我们通过自定义参数顺序/常量控制来控制签名顺序和规则。案例一(单参)#
例如 单码登录接口,需要参数card=我是单码 mac=我是机器码 timestamp=我是时间戳 safeCode=我是随机数若按照传统的字典排序法您应该计算的是
card=我是单码&mac=我是机器码&safeCode=我是随机数×tamp=我是时间戳APP_KEY
例如此处我们在后台定义
×tamp= &mac= &safeCode &card=此时您应该要计算的签名就应该是
timestamp=我是时间戳&mac=我是机器码&safeCode=我是随机数&card=我是单码APP_KEY注意:所有的系统内部参数,必须用&参数名=来标识
例如&card= &mac= &versionId=等如果不以 & 开头 且不以 =结尾
则此配置项默认作为常量参数使用
案例二(参+常量)#
仅仅是案例一,破解者可使用穷举法,将所有的参数按照顺序穷举从而得出正确的算法为了防止算法规则被穷举出,我们可以将参数混合常量使用他的参数为:card=我是单码 mac=我是机器码 timestamp=我是时间戳 safeCode=我是随机数我们可以在后台定义验签规则为
×tamp= AAA &mac= BBB &safeCode ccc &card= ddd此时您应该要计算的签名就应该是:
timestamp=我是时间戳AAA&mac=我是机器码BBB&safeCode=我是随机数ccc&card=我是单码dddAPP_KEY如此操作,即可在您的字串中添加您的自定义的标识,如此一来,即使您的参数被无限穷举,只要破解者不知道您的自定义标识,那么这个验签就是一个黑盒的过程。