如何在Python中基于当前日期和时间生成固定长度的哈希?

20 投票
5 回答
33107 浏览
提问于 2025-04-16 17:54

我想根据当前的日期和时间生成一个固定长度的哈希值(比如10个字符)。这个哈希值将会添加到我用户上传文件的名字后面。我该如何在Python中实现这个呢?

5 个回答

2

在编程中,有时候我们需要让程序做一些事情,比如重复执行某个操作。为了实现这个目的,我们可以使用“循环”。循环就像是一个指令,让程序不停地做同样的事情,直到满足某个条件为止。

比如说,如果你想让程序打印数字1到10,你可以用循环来实现。程序会从1开始,一直打印到10,然后停止。

循环有很多种类型,最常见的有“for循环”和“while循环”。“for循环”通常用于已知次数的情况,比如你知道要打印10个数字。而“while循环”则适合在不知道具体次数的情况下使用,比如你想让程序一直运行,直到用户选择退出。

总之,循环是编程中非常重要的一个概念,它能帮助我们简化代码,让程序更高效地完成任务。

import time
'{0:010x}'.format(int(time.time() * 256))[:10]
5

我觉得我的评论是个合理的回答,所以我决定发出来。这个代码使用了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位的整数,可以很方便地转换回日期时间对象,方便其他用途。如果你想进一步缩短时间戳的长度,可以把这个数字用十六进制或者其他格式来表示。比如:

hex(int(time.time()))

如果去掉 0x 前缀,这样可以把长度缩短到8个字符。

编辑:

在你的评论中,你提到不希望别人能猜到原始日期,所以我建议你可以这样做:

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

随便选一个数字,并记得在提取时间戳时要减去这个数字。这样的话,用户就很难从你的代码中推测出真实的日期。

int(stamp,16) - 12345  
44

自带功能:

Python3

import hashlib
import time

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

Python2

import hashlib
import time

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

撰写回答