我想基于当前日期&生成一个固定长度(比如说10个字符)的哈希值。时间。此哈希将附加到我的用户上传文件的名称。我怎么能用Python做到这一点?
答案 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
前缀
编辑:
在你的评论中,你指出你不希望别人弄清楚原来的日期,所以我建议你这样做:
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的答案,但是它应该很简单,也不需要任何库。我的两分钱。