废话不多说,直接上代码以及加密结果:
1.在postman中,使用CrytoJS.MD5加密带有中文字符串:
此处列举了转码前后转码(unicode)后的加密结果。
2.使用MD5在线加密工具对字符串进行加密:
加密转码后的字符串(32位小写)
直接加密未转码的字符串(32位小写):
从上面几种的加密结果可以看出,postman的CrytoJS.MD5对已转码的中文字符串进行加密时,不会直接加密转码后的字符串,会将转码后的字符串重新转码成中文加密。
3.加密使用了转义字符的url:
postman的加密结果
MD5在线加密的结果(32位小写):
加密使用了转义字符的url(32位小写加密)
从上面几种的加密结果可以看出,postman的CrytoJS.MD5对已转义的URL字符串进行加密时,不会直接加密转码后的字符串,会将转码后的字符串重新转码成原本的url加密
解决方案:
1.解决postman对unicode编码后的内容进行加密处理时,会重新转码成中文加密的方法是,在转码后的字符串前,加转义字符,如:
2.解决postman对转义后的url内容进行加密处理时,仍会对原url进行加密处理的方法:在已经转义的url前,在加一个转义符号,如:
小结:
由于我们后端是php语言,在生成接口签名时,需要对中文和url进行转义处理,并且是对转义后的结果进行加密,所以我之前一直无法使用postman生成正确的验签,通过上述例子的比较,我得出一个结论:postman对字符串加密时,不会直接处理转义、转码后的内容,而是会对原内容进行处理,为了规避postman这样的处理机制,我们只需要对转义后的内容在转义一次,然后在进行加密处理,即可得到与MD5在线加密工具加密后一样的内容。
------------------------------------------------------------------------------------------------学海无涯