从php到python的md5hash,但为false
我正在尝试将md5hash函数从php重写为python3.2 但这是错误的: php代码:从php到python的md5hash,但为false,php,python,md5,Php,Python,Md5,我正在尝试将md5hash函数从php重写为python3.2 但这是错误的: php代码: function MD5Hash($str) { $m = md5($str); $s = ''; foreach(explode("\n", trim(chunk_split($m, 2))) as $h) { $s .= chr(hexdec($h)); } return $s; } 和python代码: def md5hash(self,
function MD5Hash($str) {
$m = md5($str);
$s = '';
foreach(explode("\n", trim(chunk_split($m, 2))) as $h) {
$s .= chr(hexdec($h));
}
return $s;
}
和python代码:
def md5hash(self, st):
m = hashlib.md5(st).hexdigest()
print(str(st) +" : "+m)
s = bytes()
for i in range(0, len(m), 2):
s += chr(int(m[i:min(i+2, len(m))], 16)).encode('utf-8')
return s
我想试试看
PHP:
Python:
print(base64.b64encode(self.md5hash(self.md5hash(b"123123"))))
result: fcOsw6VSwo5iHEvCjz98w7JMW09w
我不知道如何修复它,请帮助我:(使用:
屈服
KXJU6b/guPOcaC7aMLub4A==
顺便说一句,是转换为unicode和返回到字节的过程打乱了您最初的计算。使用
utf-8
编码会将一些unicode码转换为两个字节。这并不是按您所希望的方式打包字节。(放入跟踪
chr(int(m[i:min(i+2, len(m))], 16)).encode('utf-8')
你会明白我的意思。)虽然binascii.unhexlify
编码更快更容易,这是挽救大多数错误的一种方法
您的代码的一部分是使用bytearray:
def md5hash(st):
m = hashlib.md5(st).hexdigest()
s = bytearray([int(m[i:min(i+2, len(m))], 16) for i in range(0, len(m), 2)])
return s
为什么不使用hashlib?
chr(int(m[i:min(i+2, len(m))], 16)).encode('utf-8')
def md5hash(st):
m = hashlib.md5(st).hexdigest()
s = bytearray([int(m[i:min(i+2, len(m))], 16) for i in range(0, len(m), 2)])
return s