例如,许多软件使用的许可证密钥。我曾想过对一个序列进行加密签名,所以我可能有 4 个字节的 ID 和 8 个字节的签名,但我找不到合适的算法。
我需要的是攻击者无法轻易生成的东西,但它存储在不到大约 20 个 ASCII 字节中。我还需要对独特性充满信心。这不需要完全安全,只需要防止偶然攻击即可。
注意:我在 appengine 上的 java 中执行此操作。
将包括 id 在内的值计算为字符串,并使用基于字节的 HDMAC 以及密钥和最大长度。只需确保您在要加密的值中有一个独特的部分。这可能是服务器时间或其他一些 ID。需要测试长度是否在 20 个字符的要求范围内。
听起来像HMAC。不过,您可能需要手动确保唯一性。
加密是可逆的,因此保证输出对于唯一输入是唯一的。只需每次使用相同的密钥加密 0、1、2、3、4、5 等。对于 128 位输出,在 ECB 模式下使用 AES 和 128 位数字。其他模式也需要相同的 IV/Nonce。对于 64 位数字,使用 DES。对于其他尺寸数字,请使用 Hasty Pudding 密码或滚动您自己的简单 Feistel 密码以获得您想要的尺寸。
ECB 不是最安全的模式,但我没有得到您在这里寻找非常高级别安全性的印象。