2010-08-26 51 views
1

是否有任何已知的散列算法,對於類似的輸入返回類似的輸出? 我需要它來創建「門票」,而不用根據數據庫檢查它們。我的想法是創建令牌攜帶(用戶ID和時間戳)(不可逆),並將此令牌與用戶ID一起傳遞,並且能夠檢查令牌是否給出用戶ID,並且例如在10分鐘前創建 -帶部分可逆部分的散列函數

例如,前4個字節的變化給出了明顯不同的標記,但隨着最後4個字節的變化,哈希函數返回相似的標記。

+0

將userID散列到第一個X位(int或long),並使用其餘位以易於解碼的方式對時間進行編碼。這可能有用,你能澄清這個問題有點模糊嗎? – Raynos 2010-08-26 11:50:08

回答

2

嗯。我可能會嘗試HMACs:生成一個只有您的應用程序已知的密鑰。當你需要來伸手,一個新的「票」,

  • 串聯用戶ID和時間戳(比如,使用序列化表示形式)
  • 上面創建的HMAC摘要,使用「祕密鑰匙」作爲簽名鍵

然後把三元組(用戶ID,時間戳,摘要)交給其他各方。爲了獲得這樣的票據,只需執行相同的操作:

  • 從三元組中提取用戶ID和時間戳。
  • 生成HMAC就像從以上這些信息

生成的摘要必須匹配,否則有人曾嘗試爲您呈現篡改票。這是安全的,因爲只有您的應用程序知道密鑰,並因此可以生成合適的HMAC摘要。由於時間戳信息可以簡單回溯到您,因此您可以針對某個時間窗口或其他方面進行所有必需的測試。