python - 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
解决方案
更多的是不同 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 保留了顺序,它也被视为实现细节,不应依赖它。而是对成员进行排序以保证特定的顺序。
推荐阅读
- sass - 带有媒体查询的 SASS 变量导致“'@' 之后的 CSS 无效”
- kotlin - 如何在 if-else 场景中链接反应式 Mono(s)
- java - 将 Hibernate 连接到 MySQL 数据库的问题
- php - 子实体更新时调用父实体的 Lifecyclecallback
- java - 如何从按钮操作中刷新 JavaFX 场景?
- arrays - 检查数组是否与其他数组具有相同的值
- qt - Qt 消息框不会出现
- c# - 将客户端 IP 从 ASP.NET Web API 转发到托管在 Azure 中的 .NET Core API
- java - 在 kotlin 中对视图模型进行单元测试时,getOrAwaitValue() 方法返回 IllegalArgumentException
- udp - 使用 UDP 套接字@命令行实现 GStreamer 管道