例如,許多軟件使用的許可證密鑰等。我曾想過對一個序列進行加密簽名,所以我可能有4個字節的ID和8個字節的簽名,但是我找不到合適的算法。如何生成一組易於檢查但很難僞造的(簡短)唯一標識符?
我需要的是攻擊者不能輕易產生的東西,但是存儲在少於大約20個ASCII字節中。我也需要對獨特性有信心。這並不需要是完全安全的,只能防止偶然的攻擊。
注意:我在java上使用appengine。
例如,許多軟件使用的許可證密鑰等。我曾想過對一個序列進行加密簽名,所以我可能有4個字節的ID和8個字節的簽名,但是我找不到合適的算法。如何生成一組易於檢查但很難僞造的(簡短)唯一標識符?
我需要的是攻擊者不能輕易產生的東西,但是存儲在少於大約20個ASCII字節中。我也需要對獨特性有信心。這並不需要是完全安全的,只能防止偶然的攻擊。
注意:我在java上使用appengine。
聽起來像HMAC。您可能需要手動確保唯一性。
計算包括id在內的值到一個字符串中,並使用帶密鑰和最大長度的基於字節的HDMAC。只要確保您在要加密的值中有獨特的部分。這可能是服務器時間或其他ID。長度將需要測試,它仍然在你的20個字符的要求。
加密是可逆的,所以輸出保證唯一的唯一輸入。每次只使用相同的密鑰對0,1,2,3,4,5等進行加密。對於128位輸出,在ECB模式下使用AES和128位數字。其他模式也需要相同的IV/Nonces。對於64位數字使用DES。對於其他尺寸的數字,可以使用Hasty Pudding密碼器,或者根據需要調整您自己的簡單Feistel密碼器。
ECB並不是最安全的模式,但我不覺得您在這裏尋找非常高的安全級別。
這可以在少量字節中完成嗎?越小越好,因爲我將在QR代碼中使用這些代碼... – 2013-02-12 02:13:24
@RichardRussell HMAC的長度與基礎散列的長度相同,例如,對於MD5 128位(十六進制32字節,base64 24字節,你可能不能只使用16字節的二進制表示)。如果您需要以某種方式識別密鑰,則還需要附上您的ID。 – wRAR 2013-02-12 02:24:06