0

我目前正在研究如何为基于 Web 的产品管理平台创建基于序列密钥的激活机制(语言无关紧要,因为这更像是一个设计问题),其中每个产品已售出具有注册在线支持的许可证密钥。

我有一个串行密钥编码器/解码器类,它生成 AES 加密数据,然后进行 base32 编码以返回人类可读的密钥;我需要弄清楚要在那里加密什么,它是否应该包含实际的产品代码或什么。

此外,编码器也会为每个序列生成不同的解密密钥,但我不确定我是否喜欢这种方法。在这和每个键使用盐之间哪个最好?另外,我应该在哪里存储解密密钥和盐?我正在考虑数据库以及激活密钥、盐或解密密钥,以防当前方法有效,这是正确的吗?

我还需要保持密钥长度不变,这意味着我不能在加密中传递一定数量的字符。激活密钥应该保存实际的产品数据,还是只指向数据库上的匹配行,其中激活密钥充当 PK 并从那里读取我需要的所有内容?

提前感谢您的回复,我希望我的问题不是太粗略;请耐心等待,因为我对这个特定主题相对较新。我已经阅读了其他问题,但似乎都没有解决在基于 Web 的环境中实际存储激活密钥的问题。

4

1 回答 1

0

在我看来,根本不需要加密。

您可以创建强随机字节(例如,使用 /dev/urandom)并将其用作激活密钥。

64 位随机性(从 urandom 读取 8 个字节)可能就足够了,因为它可以为您提供大约 2^32 个“激活密钥”而不会发生冲突。当然,请确保它适合您的具体情况。

例如,您的激活密钥可能看起来像这样(十六进制编码并用“-”拼接):

28d7-59bf-0a29-b482
于 2012-09-05T10:02:58.750 回答