【发布时间】:2010-12-22 10:20:02
【问题描述】:
我一直在尝试使用 MD5 哈希作为 AppEngine 上的键名,但我编写的代码引发了 UnicodeDecodeError
from google.appengine.ext import db
import hashlib
key = db.Key.from_path('Post', hashlib.md5('thecakeisalie').digest())
我不想使用hexdigest(),因为这不仅是一种杂物,而且也是一种劣质的东西(base64 会做得更好)。
【问题讨论】:
-
您能解释一下为什么您认为使用十六进制摘要不是一个好主意吗?对我来说似乎是个好主意..
-
我同意@Peter——我不清楚使用
digest()比hexdigest()好多少;文档警告它可以包含非 ASCII 字符,包括 NULL 字节。在我看来,你在那里自找麻烦。你能解释一下为什么hexdigest()在你的情况下是一个劣等的组合吗? -
@Peter, @bgporter:我也同意。 hexdigest 所做的只是将摘要表示为表示摘要的十六进制数字的字符对。
"a"的 MD5 摘要是'\x0c\xc1u\xb9\xc0\xf1\xb6\xa81\xc3\x99\xe2iw&a',而十六进制摘要是'0cc175b9c0f1b6a831c399e269772661'。如您所见,所有不能表示为 ascii 的字符(摘要中以\x开头)只是转换为十六进制摘要中的两个字符。是同一件事,表达方式不同。另外,这是您可以指定 AppEngine 密钥的唯一方法...我认为 vz0 的答案是正确的。
标签: python google-app-engine google-cloud-datastore