我应该在何处以及如何保存许可证相关信息?

时间:2009-05-16 07:56:07

标签: c# .net licensing copy-protection

我有一个应用程序(C#),我的任务是在其中加入一些简单的许可方案。在这样做的时候,我需要在计算机的某个地方保存这些信息以限制使用。

我需要保存日期和计数器。

我应该如何以及在哪里保存在Windows Vista上不需要管理权限才能运行的信息? (这意味着将它保存在System32中,程序文件,HKEY_LOCAL_MACHINE不是一个选项。)

请不要用“不要做”或“无论如何都会破解”来回答这些问题。我理解那些逻辑。我只需要为此目的做最好的事情。

3 个答案:

答案 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目录。

我们也使用自己的自定义解决方案,但是加密此数据并验证许可证日志是否相当简单。