从现在开始,我需要计算与“过去一小时内”的任何未来哈希匹配的哈希字符串。
我错误地做了:
now = datetime.now()
hash = now.strftime("%D %H")
但这只是截断了分钟,所以如果我说 4:55,在 5 分钟内“小时”就到了。
过去一小时必须是散列的一部分,因为散列字符串的使用者需要知道散列是否是在过去一小时内计算的。
我认为这根本不可能。以值 4:15、4:55、5:30 为例,哈希值为 X、Y 和 Z。4:55 在 4:55 和 5:30 的过去一小时内,因此 Y 必须等于 Z . 但是,4:15 是 4:55 的过去一小时,而不是 5:30 的过去一小时,所以 X 必须等于 Y 并且不同于 Z。
最好避免散列并按照 katrielalex 的建议进行操作,存储日期时间(或 timedelta)并在您的检查中使用它。
更新:似乎我误解了你,你想要加密的哈希,而不是为了快速访问将东西存储在哈希表中......也许如果你提供更多关于你的需求的细节,我们可以更好地帮助你,比如谁将构建哈希,谁将检查哈希,对照什么等。
一小时内没有多少分钟,甚至很多秒,因此原则上您可以简单地散列初始时间(截断到最接近的分钟/秒),然后查看散列是否仍然有效,获取当前时间并检查在此之前每分钟/秒的哈希值。一个幼稚的解决方案,但可以成为更好的起点。
类似于 mgibsonbr 的建议的简单近似解决方案是使用当前小时生成一个新令牌,然后如果失败,则再次检查过去一小时。