python - 替代使用所有 26 个字母的 hexdigest?
问题描述
我正在编写一个调用各种 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 个字母?
解决方案
尝试https://en.wikipedia.org/wiki/Ascii85及其 URL 安全变体以获得更密集的表示。
当然,您必须对原始字节进行编码。(此外,从加密的角度来看,MD5 是一个糟糕的选择,SHA2 更好。)
推荐阅读
- java - 在 Azure 应用服务中设置 JVM 堆选项
- php - 更改了 MySQL 用户密码,但脚本仍在使用旧密码
- java - 对使用 Driver 类的特定方法调用有任何帮助吗?(回文)
- firebase - Firebase:看不到事件的 AVG 和 SUM 值
- c++ - 如何在 C++ 中将变量插入到字符串中?
- java - 使用 htmlunit 抓取网页
- linux - /proc 中是否有任何文件读取它们有副作用?
- javascript - 如何在Ruby和rails中以相同的ID循环调用JS函数
- python - 操作数不能一起广播
- maven - Maven 不可解决的父 POM 问题