折腾:
【未解决】Python实现小花生中addSignature的md5加密生成签名的逻辑
期间,需要去找找Python中如何计算字符串的md5值。
python java md5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Python 3 code to demonstrate the # working of MD5 (string - hexadecimal) import hashlib # initializing string str = "GeeksforGeeks" # encoding GeeksforGeeks using encode() # then sending to md5() result = hashlib.md5( str .encode()) # printing the equivalent hexadecimal value. print ( "The hexadecimal equivalent of hash is : " , end = "") print (result.hexdigest()) |
->
The hexadecimal equivalent of hash is : f1e069787ece74531d112559945c6871
去试试
101 – Python Vs Java Md5 Hexdigest – pad.yohdah.com
【总结】
此处用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from hashlib import md5 def generateSignature(timestampInt, paramString): userId = "1134723" timestamp = "%s" % timestampInt localObject = "/Reading.svc/parentChildReadingBookQuery2" fixedSault = “AyGt7ohMR!xx #N" strToCalc = userId + timestamp + localObject + paramString + fixedSault print ( "strToCalc=%s" % strToCalc) encodedStr = strToCalc.encode() # encodedStr = strToCalc.encode("UTF-8") print ( "encodedStr=%s" % encodedStr) md5Result = md5(encodedStr) print ( "md5Result=%s" % md5Result) # md5Result=<md5 HASH object @ 0x1044f1df0> md5Hexdigest = md5Result.hexdigest() print ( "md5Hexdigest=%s" % md5Hexdigest) # md5Hexdigest=585ad2765d147c7e918478a4ce843ed2 return md5Hexdigest if __name__ = = "__main__" : timestampInt = 1553845899 paramString = "{\"userId\":\"1134723\",\"fieldName\":\"\",\"fieldValue\":\"全部类别\",\"theStageOfTheChild\":\"\",\"parentalEnglishLevel\":\"\",\"supportingResources\":\"有音频\",\"offset\":20,\"limit\":10}" generatedSignature = generateSignature(timestampInt, paramString) print ( "timestampInt=%d, paramString=%s-> %s" % (timestampInt, paramString, generatedSignature)) |
是可以生成md5值的:
1 | timestampInt=1553845899, paramString={ "userId" : "1134723" , "fieldName" : "" , "fieldValue" : "全部类别" , "theStageOfTheChild" : "" , "parentalEnglishLevel" : "" , "supportingResources" : "有音频" , "offset" :20, "limit" :10}-> 585ad2765d147c7e918478a4ce843ed2 |
【后记】
但是生成的值是:
585ad2765d147c7e918478a4ce843ed2
不是希望的:
c687d5dfa015246e6bdc6b3c27c2afea
继续参考:
试试.digest()
结果:
1 | md5Digest = md5Result.digest() |
得到的却是byte的:
1 | md5Digest=b 'XZ\xd2v]\x14|~\x91\x84x\xa4\xce\x84>\xd2' |
看来本身md5方法没啥问题。
怀疑是参数不对,所以继续研究参数。
然后去:
【已解决】为何Python中32字节的md值和小花生中getMD5Str计算出的md5值不同
后来证明上述计算方法是对的,只是参数问题而已。
转载请注明:在路上 » 【已解决】Python中计算字符串的md5值