代码之家  ›  专栏  ›  技术社区  ›  nothrow

具有部分可逆部分的哈希函数

  •  1
  • nothrow  · 技术社区  · 14 年前

    有没有已知的哈希算法,对于相似的输入,它返回相似的输出? 我需要它来创建“票”,而不需要对照数据库检查它们。我的想法是创建令牌携带(userid和timestamp)(不可恢复),并将此令牌与userid一起传递,并且能够检查令牌是否已给定userid,例如,是否在10分钟前创建-

    例如,前4个字节上的更改提供了显著不同的标记,但随着最后4个字节的更改,哈希函数返回类似的标记。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Dirk    14 年前

    嗯,我可能会试试 HMACs :生成只有应用程序知道的密钥。每当你需要分发一张新的“票”,

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

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

    • 从三元组中提取用户ID和时间戳。
    • 根据上述信息生成HMAC

    生成的摘要必须匹配,否则会有人试图向您提供一张被篡改的票据。这是安全的,因为只有您的应用程序知道密钥,因此可以生成合适的HMAC摘要。由于时间戳信息对您来说很简单,所以您可以针对某个时间窗口或其他任何内容进行所有必需的测试。