1

我需要生成和验证产品密钥,并且一直在考虑使用公钥/私钥系统。

我生成我们的产品密钥基于

  • 客户端名称(可以是可变长度字符串)
  • 一个 6 位的序列号。

如果产品密钥的长度可以控制(大约 16 个字符),那就太好了

我需要在基础上加密它们,然后分发解密/验证系统。由于我们的系统是用托管代码 (.NET) 编写的,我们不想分发加密系统,只分发解密。我需要一个公钥私钥似乎是一个很好的方法,用我保留的一个密钥加密并分发解密/验证所需的另一个密钥。

满足上述要求的适当机制是什么?

注意:这不是阻止盗版;这是为了减少新手用户安装他们不需要/未经授权使用的组件的可能性。

4

3 回答 3

1

.NET 以各种方式支持公钥加密,例如http://msdn.microsoft.com/en-us/library/ms867080.aspx。话虽如此,您所获得的只是一些信心,即完全访问已发布代码的人将无法发布自己的产品密钥。这些都不能阻止他们修补客户端以接受任何作为有效密钥的东西。这就是混淆的地方。

于 2010-06-17T00:40:43.883 回答
-2

甚至不要试图幻想反盗版。这不值得。我已经破解了无数的应用程序(嘘),而 .NET 的应用程序是 FAR 最简单的。但实际上,只要有足够的经验,它们都相对容易。如果您不相信我,请查看 isohunt 一段时间。

tl; dr:这是一场失败的战斗。不要与之抗争。如果你真的想赢,就起诉侵权——但即便如此,你也会输。

于 2010-06-17T00:56:36.413 回答
-2

我做了一些非常相似的事情。但就我而言,这是一个简单的电话授权码。用户会打电话给一个号码,给出他们的公司名称和他们正在执行的操作,获取一个代码,将它输入到应用程序中,然后就可以继续了。

我所做的是将一段数据序列化为二进制文件。数据包括散列的公司名称、操作代码/到期日期,并有空间用于未来的需求。然后我将这些位分散在数组周围以混淆它。然后我将二进制数组的每 5 位映射到 32 个字符的身份验证码字母表(0-9,az,不包括 I/O/Q/S,以便通过电话读取)。

这产生了一个很好的 16 个字符的授权码,显示为 4x4 块(####-####-####-####)。它可以很容易地通过电话读出,因为用户一次只需要听四个字符,甚至可以通过短信发送。

与您的问题一样,它并非旨在阻止Bletchley Park的代码破解者,但足以阻止普通上班族在不遵循公司程序的情况下做某事。而且,考虑到这个范围,它非常有效。

于 2010-06-17T14:00:59.983 回答