0

例如,许多软件使用的许可证密钥。我曾想过对一个序列进行加密签名,所以我可能有 4 个字节的 ID 和 8 个字节的签名,但我找不到合适的算法。

我需要的是攻击者无法轻易生成的东西,但它存储在不到大约 20 个 ASCII 字节中。我还需要对独特性充满信心。这不需要完全安全,只需要防止偶然攻击即可。

注意:我在 appengine 上的 java 中执行此操作。

4

4 回答 4

1

只需为每个 ID 生成一个GUID并跟踪您在数据库中生成的那些。GUID 的世界是如此之大,以至于每个都是独一无二的。它不是加密的,因此任何拥有足够多生成的人口的人都有可能产生匹配,但我认为可能性仍然很小。

GUID 是 128 位,可以使用Base64编码为 23 个字节。

于 2013-02-12T02:31:40.000 回答
0

将包括 id 在内的值计算为字符串,并使用基于字节的 HDMAC 以及密钥和最大长度。只需确保您在要加密的值中有一个独特的部分。这可能是服务器时间或其他一些 ID。需要测试长度是否在 20 个字符的要求范围内。

于 2013-02-12T02:12:10.323 回答
0

听起来像HMAC。不过,您可能需要手动确保唯一性。

于 2013-02-12T02:06:59.057 回答
0

加密是可逆的,因此保证输出对于唯一输入是唯一的。只需每次使用相同的密钥加密 0、1、2、3、4、5 等。对于 128 位输出,在 ECB 模式下使用 AES 和 128 位数字。其他模式也需要相同的 IV/Nonce。对于 64 位数字,使用 DES。对于其他尺寸数字,请使用 Hasty Pudding 密码或滚动您自己的简单 Feistel 密码以获得您想要的尺寸。

ECB 不是最安全的模式,但我没有得到您在这里寻找非常高级别安全性的印象。

于 2013-02-12T15:24:20.223 回答