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

时间:2011-05-18 17:22:23

标签: python

我想基于当前日期&生成一个固定长度(比如说10个字符)的哈希值。时间。此哈希将附加到我的用户上传文件的名称。我怎么能用Python做到这一点?

5 个答案:

答案 0 :(得分:28)

包括电池:

import hashlib
import time

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

答案 1 :(得分:4)

我认为我的评论是一个合理的答案,所以我将发布它。该代码使用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  

答案 2 :(得分:0)

查看strftime以获取python。您可以通过多种方式格式化日期/时间字符串以获得所需的“外观”。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如何更改自纪元以来的当前毫秒数基数。例如,在JavaScript中,更改为基数36:

Date.now().toString(36)

结果:

"jv8pvlbg"

这应该是一个安全的哈希值,最长可达毫秒,遵守日期顺序并且小于10。

唯一的事情是不安全,但是在您的情况下安全性并不重要,对吧?

对不起,我没有python的答案,但是它应该很简单,也不需要任何库。我的两分钱。