在C#中开发许可证 - 我从哪里开始? [关闭
-
04-10-2019 - |
题
我有兴趣找出在C#中开发许可模型的任何标准或资源吗?
解决方案
在C#中,您可以使用 许可课 由Microsoft提供。可以通过链接获得样本。
基本上,您创建了一个从LICENCARPROVIDER继承并键入的类
[LicenseProvider(typeof(MyControlLicenseProvider))]
作为您希望获得许可的班级的属性。在您的实施中(MyControlLicenseProvider
)您可以编码适当的方法以验证您的需求,然后进行代码调用
License license = LicenseManager.Validate(typeof(MyControl), this);
如果没有许可,则您的申请/控制已获得许可。
正如Graystar爵士所说,没有任何系统是万无一失的,并且具有所需技能的人可以在您的验证中设计自己。不要花太多时间来实施岩石硬系统,但也不要容易绕过。 :-)
使用诸如SHA或MD Hash功能之一的哈希人并喂给它们之一,可以使用一些关键数据来创建简单的验证检查。您的验证方法可以在
public override License GetLicense(LicenseContext context,
Type type,
object instance,
bool allowExceptions)
if (context.UsageMode == LicenseUsageMode.Designtime) {
// Creating a special DesigntimeLicense will able you to design your
// control without breaking Visual Studio in the process
return new DesigntimeLicense();
}
byte[] existingSerialKey = getExistingSerial();
// Algorithm can be SHA1CryptoServiceProvider for instance
byte[] data = HashAlgorithm.Create().ComputeHash(
username,
dateRequested,
validUntilDate,
// any other data you would like to validate
);
// todo: also check if licensing period is over here. ;-)
for (int l = 0; l < existingSerialKey.Length; ++l) {
if (existingSerialKey[i] != data[i]) {
if (allowExceptions){
throw new LicenseException(type, instance, "License is invalid");
}
return null;
}
}
// RuntimeLicense can be anything inheriting from License
return new RuntimeLicense();
}
此方法返回自定义 执照, ,例如,一个关于许可的属性,例如 约会时间 在许可用完的时间。设置此功能不应花费很长时间,它可以与Winforms和ASP.NET站点一起使用,并且会阻止(不保证暗示)打破许可的简单尝试。
其他提示
我从来没有遇到过这样的标准。我个人要做的是创建一个记录或类似的内容,这些记录持有所有信息,以便在输入产品密钥之前以及在审判之前多久或任何有效期(这可能很棘手) t希望与系统日期进行比较,因为用户可以更改此日期)。然后,您想对此记录进行加密(也许是通过盐和哈希)进行加密,以便只有在输入特定产品密钥时才能解锁这些功能。您可能还需要随机生成上述密钥,尽管我会以特定的格式这样做,以便用户在给出产品密钥时始终识别它们,并且不要将其与发票号码或其他任何内容混淆。
记住,没有系统是傻瓜的,某人在操作系统上的某人会以某种方式找到一种方法。这可能是我永远不会遇到任何标准的原因,因为没有什么方法是完全安全的。您只需要尽力而为。