编码产品密钥

时间:2018-12-09 13:57:31

标签: c# wpf winforms security

好吧,这是关于编码概念的问题。我已经看到许多有关如何实现产品密钥的问题,而且我知道该怎么做,这个问题与什么而不是如何有关。

好吧,这是我正在做的事情以及我的问题的背景故事。我的应用程序Ultimate Diagnostic Suite已准备好进行测试。我想实现一个产品密钥(我知道该怎么做)。我对如何执行此操作感到困惑。

产品密钥:7FD8-S89D-8746G-HUSJ

产品密钥:example@example.com

我知道如何制作常规产品密钥,但是使用第一个选项,我有一个随机数生成器可以为我生成密钥,然后可以将它们添加到数据库中并检查产品密钥,这相当很简单。我唯一要解决的问题是,如果有一百万人下载了该应用程序,那么那就是一百万个产品密钥。这将比应用程序占用更多空间。

但是,如果我使用产品密钥的电子邮件形式,并且有人下载了该应用程序,则该应用程序将进行数字签名,并忽略该100万行产品密钥文件。我的问题是这样:

如果我使用电子邮件表单(数字签名),我将如何清除垃圾邮件。我也知道我将为授权组织一些活动。我只需要一个起点。这是@符号后的结尾,例如:

您将有两个文本框,一个文本框为txtUser.Text,另一个要与电子邮件结尾的文本文件进行比较的文本框为txtEmailEndings.Text,因此简而言之,如果电子邮件的结尾为:< / p>

*@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之类的任何特定应用程序中都没有,这个概念可以同时用于两者。这就是列出标签的原因。

任何问题或评论将大有帮助。我使用的是数字签名的概念,即Microsoft从产品密钥迁移到数字签名的方式。

1 个答案:

答案 0 :(得分:1)

当用户购买其中包含RSA签名的应用程序时,我将使用json文件作为您发送的许可证文件。您的应用程序将具有RSA密钥的公钥部分,它将用于验证许可证的签名,而您的服务器将具有用于对许可证文件进行签名的秘密密钥。

该系统是分散式的,容易使用户泄漏许可证文件,但是您可以在检查更新时将机器标识符发送到Web api,如果您检测到许多共享相同许可证guid的不同机器,则可以标记许可证处于非活动状态。

将RSA密钥的公共密钥部分存储为base64,因此很难找到并用十六进制编辑器替换。此外,您可能希望混淆二进制文件。

查看此项目:https://github.com/dnauck/Portable.Licensing/blob/develop/README.md

您可以通过Recaptcha和电子邮件验证来防止垃圾邮件。

您还可以给出随机产品密钥,这些产品密钥将由您的api转换为签名的许可证文件。这些密钥具有有限的激活(存储在服务器端),并与机器标识符绑定。