如何制作用户可以阅读但不能写的文件?

时间:2010-11-22 02:44:33

标签: php encryption public-key-encryption

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

用户运行的PHP代码应该能够解密该文件(并且代码被混淆以填充他的黑客攻击)。显然用户不应该写一个类似的文件。

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


我不能只给用户一把钥匙&保持对方?他可以阅读&我可以写

5 个答案:

答案 0 :(得分:2)

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

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

您可以使用简单的对称加密或使用签名来执行此操作,这些都不会阻止他篡改程序以找到密钥。所以告诉你的老板这是一个障碍,但肯定不会牢不可破。

答案 1 :(得分:2)

您可以使用FlexNet Publisher License System等许可证。

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

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

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

当然,您必须向Flexera Software支付许可费才能使用其许可方案。并且,甚至可能存在FlexNet许可方案的某种“开源”实现,尽管我不知道它。

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

答案 2 :(得分:1)

简单的RSA加密无法解决您的困境,一旦代码明确,任何人都可以获得它。

更好的问题是“我愿意花多少工作让我的客户难以获取我的代码?”因为无论语言和方法最终都会被运行,并且当它运行时它可以被读取。

唯一可靠的方法是自己托管,不允许客户或他的服务器访问您的代码。

答案 3 :(得分:1)

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

创建许可证文件时,请使用私有键对其进行签名。当应用程序加载许可证文件时,它会使用您的 public 键验证签名,该密钥已硬编码到您的模糊许可证检查中。

显然,用户可以自行修补许可证检查代码 - 要么用自己的公钥替换公钥,要么只是为了避免许可证检查altogther - 但是你真的无能为力。

答案 4 :(得分:0)

您可能想要做的是使用XOR加密(使用密钥对文件的每个n字节块进行XOR),并且因为@AndreKR表示您实际想要做的事情是不可能的,您可能想要签署加密文件使用您的私钥,您可以验证加密是否由您完成。

当然,如果你不是每次都检查这个,并且你没有使用不透明的文件格式和编译/ obfsucated代码那么它将没有太大的区别

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