如何在Python中基于当前日期和时间生成固定长度的哈希?
我想根据当前的日期和时间生成一个固定长度的哈希值(比如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]