Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php到python的md5hash,但为false_Php_Python_Md5 - Fatal编程技术网

从php到python的md5hash,但为false

从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,

我正在尝试将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, 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