0

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

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

我应该如何以及在何处保存在 Windows Vista 上不需要管理权限即可运行的信息?(这意味着将其保存在 System32、Program Files、HKEY_LOCAL_MACHINE 不是一个选项。)

请不要用“不要这样做”或“无论如何它都会被破解”来淹没答案。我确实理解这些逻辑。我只需要为此目的做任何可以做到的最好的事情。

4

3 回答 3

4

考虑使用第三方许可组件,例如XHEO - 无需重新发明轮子。

如果您仍然需要编写自己的许可证系统,请考虑使用用户的配置文件目录或HKEY_CURRENT_USER分支。

于 2009-05-16T08:03:58.860 回答
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>

我们使用简单的 .NET 内置 API 来进行 XML 签名,并确认它已签名且有效。

我喜欢的事 ...

.. 这很容易阅读。(用于技术支持) .. 易于更换 .. 易于存储在文件系统中,或者在我们的例子中,在数据库中,便于访问和退出 UI。(我们有一个适当的更新/升级系统).. 升级很容易。我们有一项服务可以获取您的旧许可证,并在验证后根据已购买的内容提供升级定价。然后商务系统记录新旧许可证文件以供参考。

我不喜欢的东西...

..可以复制,容易被盗

于 2009-05-16T15:33:09.577 回答
0

对于企业,我们总是使用 app_root/LICENSE 目录。

我们还使用自己的自定义解决方案,但加密这些数据并验证许可证日志以进行操作是相当简单的。

于 2009-05-16T10:20:37.410 回答