【发布时间】:2019-12-11 09:26:19
【问题描述】:
我正在编写一个调用各种 API 的应用程序。每个 API 都有自己的日志记录,我想让跟踪所有各种日志文件的事务变得容易。
为此,我在事务开始时创建一个唯一(ish)字符串,记录它,然后将该字符串传递给其他 API,以便它们都可以将其包含在日志记录中。
这是我正在使用的代码:
s = '%s %s' % (username, datetime.datetime.now())
token = hashlib.md5(s.encode('utf-8')).hexdigest()
这运行良好,但仍有改进的余地。 hexdigest()(显然)只使用十六进制字符,即0-9 和a-f。如果我偶尔遇到令牌冲突,我不会太在意,但我想尽可能避免它。有没有类似的函数可以使用全部 26 个字母?
【问题讨论】:
-
这里可以选择 UUID 吗?
-
@SimeonVisser UUID 似乎具有仅使用十六进制数字的相同限制。
-
@PatrickArtner base64 为相似的输入产生相似的输出,这是我不想要的。
-
您将两个不同的问题混为一谈。 1) 散列函数及其碰撞概率,以及 2) 对散列函数的结果进行编码。我不确定您真正关心的是哪个问题。
-
@JamesKPolk 我假设更大的输出地址空间会导致更少的哈希冲突。不是这样吗?
标签: python python-3.x hash md5