生成/验证 C# 服务器控制的许可证密钥

发布于 2024-12-11 21:08:51 字数 1539 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一杯敬自由 2024-12-18 21:08:51

您可以使用现有的开源解决方案之一来生成和验证许可证文件:

这两个工具都允许您将附加数据存储到许可证文件中 ->在你的情况下允许的域名。

使用 Portable.Licensing 解决方案,您可以使用产品功能或其他许可证数据来添加允许的域名:

var license = License.New()  
    //... other options
    .WithProductFeatures(new Dictionary<string, string>  
                              {  
                                  {"example.com", "yes"},  
                                  {"domain.tld", "yes"}
                              })  
    // ... other options
    .CreateAndSignWithPrivateKey(privateKey, passPhrase);

要验证域:

if (license.ProductFeatures.Contains("domain.tld"))
    // ...

免责声明:我是 Portable.Licensing 开源项目

You can use one of the existing open source solutions to generate and validate license files:

Boths tools allow you to store additional data to the license file -> in your case the allowed domain names.

Using the Portable.Licensing solution you can use product features or additional license data to add the allowed domain names:

var license = License.New()  
    //... other options
    .WithProductFeatures(new Dictionary<string, string>  
                              {  
                                  {"example.com", "yes"},  
                                  {"domain.tld", "yes"}
                              })  
    // ... other options
    .CreateAndSignWithPrivateKey(privateKey, passPhrase);

To verify the domain:

if (license.ProductFeatures.Contains("domain.tld"))
    // ...

DISCLAIMER: i'm the author of the Portable.Licensing open source project

燕归巢 2024-12-18 21:08:51

我无法根据现有框架为您提供答案。这是我的解决方案

  1. 基本思想:像在电子邮件中一样使用签名。签名的数据是授权的 URL。
  2. 使用常规非对称加密创建公钥/私钥对(有足够的教程可用)。
  3. 将公钥嵌入到已编译的 DLL 中。
  4. 呈现控件时,加载许可证文件,使用嵌入的公钥验证其签名,根据许可证文件中提供的 URL(受签名保护)验证当前访问 URL。
  5. 成功时:让它流动
  6. 失败时:将消息添加到输出。
  7. (为了性能:将授权令牌缓存在应用程序数据内存中)
  8. (为了保护机制:在程序集上应用代码混淆器)

另外,您需要一个工具来使用私钥(不是分布式程序集的一部分)创建许可证但只是这个工具。

更新:据我所知,您最关心的是许可证密钥的创建:

  1. 一个 Windows 窗体应用程序创建
  2. 一个允许多行的文本框
  3. 每一行可以接受一个 URL。
  4. 创建 使用 StreamWriter 将所有行作为文本(基于基于 FileStream 的 CryptoStream)。
  5. 您要分发的许可证文件开放。

FileStream

I cannot provide you an answer based on an existing framework. Here my solution

  1. Basic idea: Use signatures like in emails. The signed data are the authorized URLs.
  2. Create a public / private key pair using regular asymmetric cryptography (enough tutorials available).
  3. Embed the public key in your compiled DLL.
  4. When the control is rendered, load the license file, verify its signature using the embedded public key, verify the current accessing url against the provided urls found in the license file (which are protected by the signature).
  5. On Success: Let it flow
  6. On Failure: Add your message to output.
  7. (For performance: Cache the authorization token in application data memory)
  8. (For protection of the mechansim: apply a code obfuscator on the assembly)

Additional you need a tool to create the licenses using the private key (which is not part of the distributed assembly but just this tool.

Update: As I see you biggest concern is the creation of the license key:

  1. Create a Windows Forms application
  2. Create a text box which allows multiple lines
  3. Each line can have one URL accepted.
  4. Take all lines as text, using a StreamWriter (based on CryptoStream based on FileStream).
  5. The CryptoStream uses the private key which was created before.
  6. The FileStream is open to the license file you want to distribute.

Hope that helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文