加密产品密钥:公钥和私钥加密

时间:2010-06-17 00:35:26

标签: c# encryption rsa license-key public-key-encryption

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

我根据

生成产品密钥
  • 客户名称(可以是可变长度字符串)
  • 一个6位数的序列号。

如果产品密钥具有可管理的长度(大约16个字符)

,那将是件好事

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

根据上述要求,采用适当的机制是什么?

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-2)

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

tl;博士:这是一场失败的战斗。不要打它。如果你真的想赢,就起诉侵权 - 但即使这样也会让你失败。

答案 2 :(得分:-2)

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

我所做的是将一段数据序列化为二进制。数据包括散列公司名称,操作代码/到期日期,并且有足够的空间用于未来的要求。然后我将数据分散在数组周围以使其混淆。然后我将二进制数组的每个5位映射到一个32字符的auth-code字母表(0-9,a-z,不包括I / O / Q / S,以便通过电话读取)。

这导致了一个很好的auth-code,它是16个字符,显示为4x4块(#### - #### - #### - ####)。它可以通过电话轻松读出,因为用户一次只需要听四个字符,甚至可以通过短信发送。

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