【发布时间】:2015-08-15 17:11:39
【问题描述】:
我们有一个 C# 应用程序,需要保护它免受非法复制。所以我们决定使用Portable.Licensing 库来保护我们的系统。
如何将许可证绑定到Portable.Licensing 中的硬件 ID,以便只有特定 PC 可以使用许可证?
【问题讨论】:
我们有一个 C# 应用程序,需要保护它免受非法复制。所以我们决定使用Portable.Licensing 库来保护我们的系统。
如何将许可证绑定到Portable.Licensing 中的硬件 ID,以便只有特定 PC 可以使用许可证?
【问题讨论】:
您可以针对 PC 的名称、硬件信息等生成唯一的哈希,并在创建许可证期间将此哈希添加为 Additional Attribute。
许可证创建示例:
var license = License.New()
.WithUniqueIdentifier(Guid.NewGuid())
.As(LicenseType.Standard)
.WithMaximumUtilization(1)
.WithAdditionalAttributes(new Dictionary<string, string>
{
{"HardwareId", "........"}
})
.LicensedTo("John Doe", "john.doe@yourmail.here")
.CreateAndSignWithPrivateKey(privateKey, passPhrase);
要验证属性,您可以实现自己的验证扩展方法或只使用现有的AssertThat()。示例:[1]
唯一硬件 ID 的生成超出了可移植许可的范围。
【讨论】:
你可以调用AsserThat方法:
license.Validate()
.AssertThat(lic => lic.ProductFeatures.Get("HardwareId") == "133456", new GeneralValidationFailure() { Message="Invalid Hardware.", HowToResolve="Contact administrator"});
【讨论】:
var validationFailures = license.Validate()...(I want put your code here),但我总是编译失败。你能举个例子吗?
Add() 方法解决了错误。但是没有关于它的详细文件。
使用 ProtectedData.Protect 和 DataProtectionScope.LocalMachine 来加密许可证文件中的某些键值对。 那么,只有在同一台机器上可以成功解密该值时,该许可证才有效。
ProtectedData.UnProtect 只会在它被加密的同一台机器上解密。 不过,这将需要在注册过程中进行桌面/客户端服务器交互才能实现。
【讨论】: