在postman使用MD5加密出来的结果与使用python加密出来的结果不一致?
var token = '7A4F7B99-EB5E-4885-9C70-AC9F0F0A50C4_49265'
var timestamp = 1630637229627
var requestParam = {
"phone": "18144854881",
"customerCode": "075520662307"
}
var signstr1 =(CryptoJS.MD5( CryptoJS.MD5(token).toString().toUpperCase() +timestamp +requestParam.toString())).toString().toUpperCase();
我在postman加密出来的结果为:2F3B8F32080BD44750E7921E2CDBA484 和我使用python的MD5库加密出来的结果不一致;
上面的 requestParam是直接使用 request.data获取得到的请求数据,timestamp为Math.round(new Date().getTime());获取得到的,有人知道怎么使用python转换的吗?
postman如下图:
这个问题太坑了,我找了好久才找到问题所在,以下是修改的程序代码,主要问题就在于request.data这里
所以这个位置,看似一样,其实本质还是不同。
希望能能够采纳支持,谢谢!!!
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: Roc-xb
"""
import hashlib
def MD5(data):
m = hashlib.md5()
m.update(data.encode('utf-8'))
return m.hexdigest()
if __name__ == '__main__':
token = '7A4F7B99-EB5E-4885-9C70-AC9F0F0A50C4_49265'
timestamp = "1630637229627"
requestParam = "{\r\n \"phone\": \"18144854881\",\r\n \"customerCode\": \"075520662307\"\r\n}"
sign = str(MD5(str(MD5(token)).upper() + timestamp + requestParam)).upper()
print("sign:",sign)
程序运行结果:
因为timestamp时间戳不一样吧。
python对url的“-”、“_”均做了转义处理,而postman在处理这样的字符串时,会直接忽略转义符号,导致加密的结果与Python加密的结果不一致。
原因是\的处理,如下js跟python就一致了。
window.onload = function(){
var token = '7A4F7B99-EB5E-4885-9C70-AC9F0F0A50C4_49265'
var timestamp = 1630637229627
var requestParam = {
"phone":"18144854881",
"customerCode":"075520662307"
}
var data = CryptoJS.MD5(token).toString().toUpperCase()+timestamp +JSON.stringify(requestParam).toString();
console.log(data);
data = "C6856D5DF42579CA03564F3CBC9F32251630637229627{\"phone\": \"18144854881\", \"customerCode\": \"075520662307\"}";
var data1 = CryptoJS.MD5(data).toString().toUpperCase();
console.log(data1);
//var signstr1 =(CryptoJS.MD5( CryptoJS.MD5(token).toString().toUpperCase()
//+timestamp +requestParam.toString())).toString().toUpperCase();
//console.log(signstr1);
}
问题在这个地方 postman 对这个对象转string的时候没有把值传回来