我即将出售我用 C# 编写的程序,并且我想严格控制它的许可证。这意味着我想让客户端每次启动时都连接到我的服务器。这也使我能够禁用密钥(在贝宝退款或代码分发的情况下)。当然这对其他用户来说可能是个麻烦,但在这种情况下是必要的。由于我找不到任何未破解的好的 .NET Licensing 系统,我想自己编写一个小系统。我的计划是执行以下操作:
- 生成一个包含 1024 个字符的 key.dat,随软件一起提供(每个用户都有)
- 在应用程序入口点向我的服务器添加一个 httprequest,它发送 key.dat + 当前时间戳,加密。
- 我的 HTTP 服务器(运行 PHP)解密请求并检查密钥是否有效(在我的数据库中)并回复“访问级别”(许可证类型)。如果密钥无效或被禁用,它会回复错误代码。就像请求一样,回复是用时间戳加盐的,因此某人无法通过向自己发送有效数据包来验证他的程序。正在客户端中检查时间戳。回复使用 RSA 和先前生成的公钥加密。
- 客户端收到响应,用私钥解密并做出反应。
RSA 是否是正确的方法,所以我可以确保数据包是由我发送的,而不是由我制作的(没有其他人拥有公钥)?有没有更好的方法来解决这个问题?