C# 对于使用web服务的串行密钥激活来说,这是一个好概念吗?
我正在用WPF编写一个windows桌面应用程序。我需要加入一个激活过程,不知道我的想法是否正确 这就是我想实施的过程。这是最好的解决办法吗C# 对于使用web服务的串行密钥激活来说,这是一个好概念吗?,c#,web-services,activation,product-key,C#,Web Services,Activation,Product Key,我正在用WPF编写一个windows桌面应用程序。我需要加入一个激活过程,不知道我的想法是否正确 这就是我想实施的过程。这是最好的解决办法吗 当用户加载应用程序时,它会检查带有激活码的注册表项 需要激活 如果注册表中没有激活密钥,则会给它们一个激活页面 在这里,他们将输入他们将从我们那里收到的激活密钥 当用户单击activate时,我会获取他们硬盘的序列号并将其散列 然后我连接到一个Web服务,我已经写了检查 --钥匙存在吗 --是否为其分配了HDD串行哈希 --它是活动的吗 如果它通过了
- 当用户加载应用程序时,它会检查带有激活码的注册表项
- 如果注册表中没有激活密钥,则会给它们一个激活页面
- 在这里,他们将输入他们将从我们那里收到的激活密钥
- 当用户单击activate时,我会获取他们硬盘的序列号并将其散列
- 然后我连接到一个Web服务,我已经写了检查 --钥匙存在吗 --是否为其分配了HDD串行哈希 --它是活动的吗
- 如果它通过了所有这些标准,我将通过webservice使用HDD序列更新我的DB,并将其标记为活动
- 获取他们硬盘的序列号并对其进行哈希运算
- 从注册表中检索该项
- 连接到webservice以检查密钥是否存在、是否仍处于活动状态以及是否已分配给正确的HDD哈希
- 如果是,我允许用户继续
- 如果没有,我将删除注册表项,并通知他们需要重新激活软件,然后加载激活页面李>
任何人能提出的任何建议都将不胜感激。我找不到任何答案。到目前为止,您提出的概念很好,但由于您要求用户随时在线,因此我还将使用RSA加密数据 您的产品将获得硬编码的公钥,并且您发送到服务器的数据将使用RSA私钥加密发送回。
通过这种方式,您可以防止他们使用自制的激活服务器,这些服务器只会说“一切正常,您已激活。”听起来不错,但您需要记住:
- 必须使用SSL保护与Web服务的连接
- web服务之间的消息交换必须使用某种形式的私钥/公钥进行签名,以便客户端知道消息确实来自服务器,而用户不创建自己的激活服务器
- 您的Web服务必须位于具有高可用性的服务器上(您不希望愤怒的用户因为无法完成工作而呼叫)
- 硬盘序列号可以更改。你可能想把它和其他东西结合起来