xml – 您可以通过这种方式验证许可证吗?

前端之家收集整理的这篇文章主要介绍了xml – 您可以通过这种方式验证许可证吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 XML文件,描述了产品获得许可的公司名称,版本和一些额外信息.

看起来像这样

<Licence>
  <Name>sdfsdf</Name>
  <Version>1.2.1.1</Version>
  <NumberOfServer>4</NumberOfServer>
</Licence>

然后,我使用私钥签署此fiel并获取

<Licence>
  <Name>sdfsdf</Name>
  <Version>1.2.1.1</Version>
  <NumberOfServer>4</NumberOfServer>
  <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>M368eFB9ydifttSxX26sB6XiPV4=</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>TTYP6d+zESn6/2PtL5ikN+7E9u8Njm32vYVyVANC5U0EGLBwS//3yPjUoBx3glJXHClzPQBQEUi0LJNauTFvo1IBYwLjAuaYGtleti4IXpjrQCVaIudETSv5Z7oB8+C/+nsqsC26fXf9vWxvaKXJJzcep88r0wIfVe31HSd18FU=</SignatureValue>
  </Signature>
</Licence>

然后我在应用程序中发送公钥并读取文件以确保它们具有正确的版本,并且“NumberOfServers”作为许可证密钥用于.

这种方法的缺点是什么?

谢谢

解决方法

我建议的一件事是滚动你自己的XML文件签名方法.我最初使用SignedXml类进行许可,但后来意识到,通过查看XML文件本身(因为指定了算法等),任何人都非常容易地推断出我在做什么.

因此,我将每个数据(客户编号,许可证密钥和版本)组合在一起,对其进行哈希处理,并对结果进行签名,而不是整个XML文件.然后我对它进行了更多的混淆,并将数据作为许可证中的单个“数据”元素添加.

只要看一下,我就不可能看到任何关于我使用的算法或过程的指标.当然,任何人都可以轻松地在Reflector中打开我的程序集,看看它是如何被验证的.但是,由于每个许可证的副本都存档,如果我怀疑客户已经更改了许可证以便为他们提供更多功能,我可以与我的人员核实他们的副本,并拒绝给予任何进一步的支持和/或采取法律行动.

猜你在找的XML相关文章