我目前正在研究如何为基于web的产品管理平台创建一种基于序列密钥的激活机制(语言并不重要,因为这更多的是一个设计问题),在该机制中,销售的每个产品都有一个注册在线支持的许可证密钥。
我有一个串行密钥编码器/解码器类,它生成AES加密的数据,然后进行base32编码以返回人类可读的密钥;我需要弄清楚在其中加密什么,它是否应该包含实际的产品代码或什么。
此外,编码器还会为每个序列生成不同的解密密钥,但我不确定是否喜欢这种方法。在这和对每个键使用盐之间,哪一个是最好的?另外,我应该在哪里存储解密密钥和盐?我在考虑DB,以及激活密钥,用于盐或解密密钥,如果当前的方法是有效的,这是正确的吗?
我还要求保持密钥的长度,这意味着我不能在我的加密中传递一定数量的字符。激活密钥应该保存实际的产品数据,还是只指向数据库中作为PK的匹配行,并从那里读取我需要的所有内容?
提前感谢您的回复,我希望我的问题不是太粗略;请容忍我,因为我对这个特定的主题相对较新。我已经阅读了其他问题,但似乎没有一个问题解决了在基于web的环境中实际存储激活密钥的问题。
发布于 2012-09-05 18:02:59
在我看来,根本不需要加密。
您可以创建强随机字节(例如,使用/dev/urandom)并将其用作激活密钥。
64比特的随机性(从urandom读取8个字节)可能就足够了,因为它提供了大约2^32个“激活密钥”,而不会发生冲突。当然,要确保它适合您的特定情况。
例如,您的激活密钥可能如下所示(十六进制编码并与“-”拼接):
28d7-59bf-0a29-b482https://stackoverflow.com/questions/12277232
复制相似问题