具有部分可逆部分的散列函数

时间:2010-08-26 11:45:38

标签: security hash

是否有任何已知的哈希算法,对于类似的输入返回类似的输出? 我需要它来创建“门票”而不用检查它们。我的想法是我创建令牌携带(userID和时间戳)(不可逆),并将此令牌与userID一起传递,并且能够检查,如果令牌已经给出UserID,并且例如,是在10分钟前创建的 -

例如,改变前4个字节会产生明显不同的令牌,但是如果最后4个字节发生变化,则散列函数会返回类似的令牌。

1 个答案:

答案 0 :(得分:2)

嗯。我可能会尝试HMACs:生成一个只为您的应用程序所知的密钥。每当你需要分发新的“门票”时,

  • 连接用户ID和时间戳(例如,使用序列化表示)
  • 使用“密钥”作为签名密钥
  • 创建上述HMAC摘要

然后将三重(用户ID,时间戳,摘要)分发给其他方。为了验证这样的票,只需这样做:

  • 从三元组中提取用户ID和时间戳。
  • 从此信息中生成HMAC,如上所述

生成的摘要必须匹配,否则有人会尝试向您显示篡改的票证。这是安全的,因为只有您的应用程序知道密钥,因此可以生成合适的HMAC摘要。由于时间戳信息对您来说很明显,您可以根据某个时间窗口或其他任何方式进行所有必需的测试。