好的,这是一个关于编码概念的问题。我看到了很多关于如何实现产品密钥的问题,我知道如何实现,这个问题和什么有关,而不是如何实现。
好的,这是一个关于我正在做什么的背景故事,然后是我的问题。我的应用程序终极诊断套件即将推出测试。我想实现一个产品密钥(我知道如何做到这一点(。我在如何做这件事上左右为难。
产品密钥:7FD8-S89D-8746G-HUSJ
产品密钥:example@example.com
我知道如何制作常规的产品密钥,但对于第一个选项,我有一个随机数生成器,可以为我生成密钥,然后我可以将它们添加到数据库中并检查产品密钥,这很简单。我唯一的问题是,如果有100万人下载该应用程序,那么就是100万个产品密钥。这将比应用程序占用更多的空间。
然而,如果我使用产品密钥的电子邮件形式,并且有人下载了该应用程序,那么它将被数字签名,并将省略100万行的产品密钥文件。我的问题是:
如果我使用电子邮件表单(数字签名(,我将如何清除垃圾邮件。此外,我知道我将为授权安排一些活动。我只需要一个起点。这是用于@符号后的结尾,例如:
您将有两个文本框,一个文本框将是txtUser.Text
,另一个与电子邮件结尾的文本文件进行比较的文本框将为txtEmailEndings.Text
,因此简而言之,如果电子邮件的结尾为:
*@163.com
*@aichyna.com
*@berahe.info
if (txtEmailEndings.Text == dbNotAllowed.Text)
{
messagebox.Show("Please use a valid email, i.e, Gmail, Outlook, AOL");
}
else if (txtEmailEndings != dbNotAllowed.Text)
{
// do something to allow access to full program
}
有了这个概念,我会有一个已知的垃圾邮件机器人高风险电子邮件结尾的列表。我认为这将减少垃圾邮件机器人,然而任何电子邮件都可以为垃圾邮件机器人制作。
我唯一的其他选择是固定费用,这将回到Flat Fee = Product Key
。拥有一系列永不停息的产品密钥。我不想只拥有一个产品密钥,因为它可以被利用。
这不是在任何特定的应用程序中,如WinForms或WPF,这个概念可以用于两者。这就是列出标签的原因。
任何问题或意见都将非常有帮助。我使用数字签名的概念,就像微软从产品密钥迁移到数字签名一样。
当用户购买包含RSA签名的应用程序时,我会使用json文件作为您发送的许可证文件。您的应用程序将拥有RSA密钥的公钥部分,它将用于验证许可证的签名,而您的服务器将拥有用于对许可证文件进行签名的密钥。
该系统是去中心化的,用户很容易泄露许可证文件,但在检查更新时,您可以向web api发送机器标识符,如果您检测到许多不同的机器共享相同的许可证guid,则将许可证标记为非活动。
将RSA密钥的公钥部分存储为base64,这样就很难找到并用十六进制编辑器替换。此外,您可能希望混淆二进制文件。
看看这个项目:https://github.com/dnauck/Portable.Licensing/blob/develop/README.md
您可以通过Recaptcha和电子邮件验证来防范垃圾邮件。
您还可以提供随机的产品密钥,这些密钥由您的api转换为签名的许可证文件。这些密钥具有有限的激活(存储在服务器端(,并且绑定到机器标识符。