【问题标题】:How to hash a time interval?如何散列时间间隔?
【发布时间】:2012-03-02 04:52:51
【问题描述】:

我需要从现在开始计算与“过去一小时内”的任何未来哈希匹配的哈希字符串。

我错了:

now = datetime.now()
hash = now.strftime("%D %H")

但这只是截断了分钟,所以如果我在 4:55,5 分钟内“小时”就到了。

过去一小时是散列的一部分,因为散列字符串的使用者需要知道散列是否是在过去一小时内计算的。

【问题讨论】:

  • 为什么必须是哈希字符串?为什么不直接存储 datetime 对象并进行比较?
  • 我想你可能会喜欢this other question
  • @katrielalex,我有一个仅在过去一小时内构建的令牌才有效。如果我提供日期时间对象和令牌,攻击者可以更容易地找出散列算法。
  • @Ramin:如果您希望您的哈希在密码学上是安全的,请使用安全哈希,您不必担心攻击者会破坏算法。如果没有,您可以提供所需的所有信息。

标签: python hash strftime


【解决方案1】:

我认为这根本不可能。以值 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)并在您的检查中使用它。

更新:似乎我误解了你,你想要加密的哈希,而不是为了快速访问将东西存储在哈希表中......也许如果你提供更多关于你的需求的细节,我们可以帮助你更好,比如谁来构造哈希,谁来检查哈希,对照什么等等。

一小时内没有多少分钟,甚至很多秒,因此原则上您可以简单地散列初始时间(截断到最接近的分钟/秒),然后查看散列是否仍然有效,取当前时间时间并在此之前检查每分钟/秒的哈希值。一个幼稚的解决方案,但可以成为更好的起点。

【讨论】:

    【解决方案2】:

    类似于 mgibsonbr 的建议的简单、近似解决方案是使用当前小时生成一个新令牌,然后如果失败,则再次检查过去一小时。

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2018-03-31
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多