首页 > 解决方案 > Python - Windows 和 Linux 上相同 dict 值的不同哈希值

问题描述

我已经浏览了所有关于不同平台上相同字符串的不同哈希值的问题和答案。但没有一个解决我的问题。如果我对以下案例失败的原因有所了解会有所帮助

我的代码:

import hashlib
import binascii

params = "{'name':'xyz-3113','sur_name':'karuna_karan_3113' ,'init_range':'500','power_down_range':'0','power_high_range':'1000'}"
name = 'xyz'

def generateHash(name,paramsDict={}):

    paramsDict = eval(paramsDict)

    key = hashlib.md5(str(name)+str(paramsDict))
    bin_key = key.digest()
    return bin_key

hash_key = generateHash(name, params)
print binascii.hexlify(hash_key)

Windows 中的输出:ea94e618b69f10d55dcd27562fb06378

Linux 中的输出:6d1a40ae190c63f687456a46321165e9

标签: pythonpython-2.7hashlib

解决方案


更多的是不同 Python 版本之间的差异。例如,在我的 macOS 上,我在 Python 2 和 Python 3 之间得到不同的结果。

在 Python 2 中:

eval(params)
{'power_high_range': '1000', 'power_down_range': '0', 'sur_name': 'karuna_karan_3113', 'name': 'xyz-3113', 'init_range': '500'}

在 Python 3 中:

eval(params)                                                                                                        
{'name': 'xyz-3113', 'sur_name': 'karuna_karan_3113', 'init_range': '500', 'power_down_range': '0', 'power_high_range': '1000'}

中的字段顺序dict不同,所以str(paramsDict)不同,结果也不同。请注意,即使 Python 3 保留了顺序,它也被视为实现细节,不应依赖它。而是对成员进行排序以保证特定的顺序。


推荐阅读