我有一个应用程序(C#),我的任务是在其中加入一些简单的许可方案。在这样做的时候,我需要在计算机的某个地方保存这些信息以限制使用。
我需要保存日期和计数器。
我应该如何以及在哪里保存在Windows Vista上不需要管理权限才能运行的信息? (这意味着将它保存在System32中,程序文件,HKEY_LOCAL_MACHINE不是一个选项。)
请不要用“不要做”或“无论如何都会破解”来回答这些问题。我理解那些逻辑。我只需要为此目的做最好的事情。
答案 0 :(得分:4)
考虑使用第三方许可组件,例如XHEO - 无需重新发明轮子。
如果仍需要编写自己的许可证系统,请考虑使用用户的配置文件目录或HKEY_CURRENT_USER
分支。
答案 1 :(得分:4)
我们使用签名的XML许可证文件。它是一个简单的XML文件,显示用户购买的内容。
关于这一点的好处在于它是未来的竞争对手。您可以轻松添加产品功能或产品系列,到期日期和功能属性。
我们的商务网站很容易按需创建和打包许可证,只需确保您的私钥永远不会泄露。对我们来说,这里的优点是我们的缺点,也是我们无法避免的最大问题,就是简单地处理许可证文件。
这是一个示例xml文件
<?xml version="1.0" encoding="utf-8"?>
<ProductName>
<License>
<LicenseId>20025fb9-5349-46d4-a530-55b0295beaaa</LicenseId>
<CustomerName>Scott.Cate@Example.com</CustomerName>
<MajorVersion>2008</MajorVersion>
<Product>Friendly Display Name</Product>
<ProductType>Enterprise</ProductType>
<Features>
<!--Add features here-->
</Features>
<Expires>0001-01-01T00:00:00</Expires>
</License>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>u3{..........}U2jo=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>QFg1kI{...............}DwDIE=</SignatureValue>
</Signature>
</ProductName>
我们使用内置API的简单.NET来进行XML签名,并确认它是有罪和有效的。
我喜欢的事情......
..它很容易阅读。 (用于技术支持) ..它很容易更换 ..易于存储,在文件系统中,或在我们的案例中,数据库,以便于访问和进出UI。 (我们有一个到位的更新/升级系统) ..它很容易升级。我们提供的服务可以使用您的旧许可证,并在验证后根据已购买的内容提供升级价格。然后,商务系统记录旧的和新的许可证文件以供参考。
我不喜欢的事情......
..可以复制,轻易被盗
答案 2 :(得分:0)
对于企业我们总是使用app_root / LICENSE目录。
我们也使用自己的自定义解决方案,但是加密此数据并验证许可证日志是否相当简单。