-1

我想将软件许可证作为加密文件分发。每次有人购买许可证时,我都会创建一个新文件并将其通过电子邮件发送出去,并附有将其放入某个目录的说明。

用户运行的 PHP 代码应该能够解密文件(并且代码被混淆以填充他破解该文件)。显然,用户不应该能够编写类似的文件。

我们不要讨论这是否值得。我已被命令执行它,所以……我该怎么做?我可以使用公钥加密并给他一把钥匙吗?


我不能只给用户一把钥匙并保留另一把吗?他会读,我会写

4

5 回答 5

2

如果您有一个文件只是说“是的,软件可能正在运行”,您当然不能阻止他复制该文件。

可以做的是使用特定于客户系统、客户名称或 IP 地址或其他内容的内容来加密文件。然后,您可以让您的软件检查此 IP 地址或在所有报告或其他内容上打印客户姓名。

您可以使用简单的对称加密或使用签名来做到这一点,它们都不能阻止他篡改程序以找到密钥。所以告诉你的老板这是一个障碍,但肯定不是牢不可破的。

于 2010-11-22T02:59:07.960 回答
1

听起来您正在寻找的是数字签名。

创建许可证文件时,您使用您的私钥对其进行签名。当应用程序加载许可证文件时,它会使用您的公钥验证签名,该公钥被硬编码到您的混淆许可证检查中。

显然,用户可以自己修补许可证检查代码——要么用他们自己的公钥替换你的公钥,要么完全避免许可证检查——但你真的无能为力。

于 2010-11-25T06:38:58.833 回答
1

简单的 RSA 加密不会解决您的问题,一旦代码清晰,任何人都可以得到它。

一个更好的问题是“我愿意付出多少努力让我的客户难以获得我的代码?” 无论语言和方法如何,它最终都会运行,并且在运行时可以读取。

唯一万无一失的方法是自己托管它,并且不允许您的客户端或他的服务器访问您的代码。

于 2010-11-22T02:59:41.137 回答
1

您可以使用FlexNet Publisher License System 之类的许可证。

FlexNet 许可证有两个方面。首先是确定一个站点是否有许可证。这可以根据 IP、Mac 地址或处理器的内部 ID 来完成。

获得站点许可后,该站点的许可可以在活跃用户的基础上完成(您可以有数千个用户,但一次只能有十个用户可以使用该软件)、单机许可(您在可以使用它的站点,并且只有那些人可以使用它。如果第十一个人想要它,该站点必须将许可证从一个获得许可的人转移给该新用户。或者,购买更多许可证)。而且,您可以拥有无​​限用户的站点许可证。

FlexNet 许可证可以被破坏,但通常很强大,可以向您报告违反许可证政策的情况。

当然,您必须向 Flexera Software 支付许可费才能使用他们的许可方案。而且,FlexNet 许可计划甚至可能有某种“开源”实现,尽管我不知道有哪一种。

我从未使用过它,因为我完全相信开源软件理念。那和事实比没有人会为我写的任何东西支付一分钱。

于 2010-11-22T03:05:00.620 回答
0

可能您想要做的是使用 XOR 加密(用密钥对文件的每个 n 字节块进行 XOR),因为正如@AndreKR 所说,您实际上想要做的事情是不可能的,您可能想用您的私人签名加密文件密钥,然后您可以验证加密是由您完成的。

当然,如果您不每次都检查这一点,并且您不使用不透明的文件格式和编译/混淆的代码,那么它不会有太大的区别

如果您要将数据显示给用户,在一般情况下不可能停止数据的数字复制 - 在最坏的情况下,他们只能拍摄屏幕截图(甚至捕获发送到监视器的信号)

于 2010-11-22T02:58:52.603 回答