如何在 Python 中根据当前日期和时间生成固定长度的散列?

新手上路,请多包涵

我想根据当前日期和时间生成一个固定长度(比如说 10 个字符)的散列。此哈希将附加到我的用户上传的文件的名称。我怎样才能在 Python 中做到这一点?

原文由 tamakisquare 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 385
2 个回答

电池包括:

Python3

 import hashlib
import time

hashlib.sha1().update(str(time.time()).encode("utf-8"))
print(hashlib.sha1().hexdigest())
print(hashlib.sha1().hexdigest()[:10])

蟒蛇2

 import hashlib
import time

hash = hashlib.sha1()
hash.update(str(time.time()))
print hash.hexdigest()
print hash.hexdigest()[:10]

原文由 Ferdinand Beyer 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为我的评论是一个合理的答案,所以我要发布它。该代码使用 python time() 函数来获取自 unix 纪元以来的秒数:

 import time
import datetime
ts = int(time.time())  # this removes the decimals

# convert the timestamp to a datetime object if you want to extract the date
d = datetime.datetime.fromtimestamp(ts)

时间戳目前是一个 10 位整数,可以很容易地转换回日期时间对象以供其他用途。如果您想进一步缩短时间戳的长度,您可以将数字编码为十六进制或其他格式。 IE。

 hex(int(time.time()))

如果删除 0x 前缀,这会将长度减少到 8 个字符

编辑:

在您的评论中,您指定您不希望人们弄清楚原始日期,所以我建议您这样做:

 hex(int(time.time() + 12345))[2:]   #The [2:] removes the 0x prefix

只需选择一个数字并记住在尝试提取时间戳时减去它。如果不知道这个数字,用户将很难从您的代码中推断出真实日期。

 int(stamp,16) - 12345

原文由 GWW 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题