首页 > 解决方案 > 替代使用所有 26 个字母的 hexdigest?

问题描述

我正在编写一个调用各种 API 的应用程序。每个 API 都有自己的日志记录,我想让跟踪所有各种日志文件的事务变得容易。

为此,我在事务开始时创建一个唯一(ish)字符串,记录它,并将该字符串传递给其他 API,以便它们都可以将其包含在日志记录中。

这是我正在使用的代码:

s = '%s %s' % (username, datetime.datetime.now())
token = hashlib.md5(s.encode('utf-8')).hexdigest()

这运行良好,但仍有改进的余地。 hexdigest()(显然)只使用十六进制字符,即0-9a-f. 如果我偶尔遇到令牌冲突,我不会太在意,但我想尽可能避免它。是否有类似的函数可以使用所有 26 个字母?

标签: pythonpython-3.xhashmd5

解决方案


尝试https://en.wikipedia.org/wiki/Ascii85及其 URL 安全变体以获得更密集的表示。

当然,您必须对原始字节进行编码。(此外,从加密的角度来看,MD5 是一个糟糕的选择,SHA2 更好。)


推荐阅读