简体   繁体   中英

MD5 Mismatch between Python and PHP

I am trying to compare the MD5 string between PHP and Python, the server we have is working fine with PHP clients, but when we tried to do the same in python, we always get an invalid response from the server.

I have the following piece of code In Python

import hashlib
keyString = '96f6e3a1c4748b81e41ac58dcf6ecfa0'
decodeString = ''
length = len(keyString)
for i in range(0, length, 2):
   subString1 = keyString[i:(i + 2)]
   decodeString += chr(int(subString1, 16))
print(hashlib.md5(decodeString.encode("utf-8")).hexdigest())

Produces: 5a9536a1490714cb77a02080f902be4c

now, the same concept in PHP:

$serverRandom = "96f6e3a1c4748b81e41ac58dcf6ecfa0";
$length = strlen($serverRandom);
$server_rand_code = '';
for($i = 0; $i < $length; $i += 2)
  {
    $server_rand_code .= chr(hexdec(substr($serverRandom, $i, 2)));
  }
echo 'SERVER CODE: '.md5($server_rand_code).'<br/>';

Produces: b761f889707191e6b96954c0da4800ee

I tried checking the encoding, but no luck, the two MD5 output don't match at all, any help?

Looks like your method of generating the byte string is incorrect, so the input to hashlib.md5 is wrong:

print(decodeString.encode('utf-8'))
# b'\xc2\x96\xc3\xb6\xc3\xa3\xc2\xa1\xc3\x84t\xc2\x8b\xc2\x81\xc3\xa4\x1a\xc3\x85\xc2\x8d\xc3\x8fn\xc3\x8f\xc2\xa0'

The easiest way to interpret the string as a hex string of bytes is to use binascii.unhexlify , or bytes.fromhex :

import binascii

decodeString  = binascii.unhexlify(keyString)
decodeString2 = bytes.fromhex(keyString)

print(decodeString)
# b'\x96\xf6\xe3\xa1\xc4t\x8b\x81\xe4\x1a\xc5\x8d\xcfn\xcf\xa0'

print(decodeString == decodeString2)
# True

You can now directly use the resulting bytes object in hashlib.md5 :

import hashlib

result = hashlib.md5(decodeString)
print(result.hexdigest())
# 'b761f889707191e6b96954c0da4800ee'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM