没有违法行为,但我们不讨论许可计划可以被破解(我知道)并且诉诸法律通常是更好的威慑(可能在你的国家,但根本没有).
不是我的选择 - 我被告知要实施许可,只是足以让随意的黑客远离.
可能会略微不同的是,运行该软件的PC并不总是具有互联网访问权限.
当有人购买产品时,我可以在其中构建许可信息并发送安装CD.但是,如果他们想购买更多许可证会怎样?我不想在现场更新许可数据,但他们可能无法访问我的服务器,也不能访问他们的服务器.
我想在外部(加密)文件中获得许可证,每个文件包含许多许可证和到期日期.如果用户购买了更多的许可证,那么我可以通过电子邮件发送一个额外的文件并清除其安全性,IT人员可以将其刻录到CD或USB记忆棒,然后将其复制到应用程序数据目录.
这看起来好吗?你能想到更好的东西吗?你能看到问题吗?我没有太多时间来实现这一点.
如果许可证包含大量信息,那就没问题了.通常它们不是这样,它们可以在30-50个字符左右的时间内加密完成一些保护.然后可以通过电子邮件发送,剪切和粘贴,甚至打印这些内容.
至于保护方案,PKV或部分密钥验证很受欢迎.关于它,有很多关于它的问题,谷歌搜索将提供许多不同的语言实现.
我使用椭圆曲线的非对称密码学。要生成新的许可证密钥,哈希用户名(或电子邮件,可能还会附加一些应用程序ID),请使用您的私钥对哈希签名,并使用base-32进行编码,以得到一个不错的密钥,例如HQYRV-OZFNZ-M3L7B-WA644-CXLG4-D7IRD-QZ6FY-GJGTO-MEXEG。
要验证许可证,请按上述方式对用户名进行哈希处理,并使用您的公钥验证哈希的签名。
这具有许多优点:密钥相对较短(由于使用EC而不是RSA / DSA),密钥是“随机的”,因为每次为相同的用户名生成一个不同的密钥,并且至关重要的是,没有密钥源应用程序中的代码,而破解者无法在不掌握私钥的情况下编写密钥生成器。
我在GitHub上有一个用于执行此操作的库:https://github.com/vslavik/ellipticlicense(这是现已死的Objective-C项目的分支,我添加了可移植的C API并进行了其他一些改进)。