我有一堆 R 脚本,我在 Windows 机器上运行,并希望确保那些不打算看到它的人不阅读代码。在 Linux 机器上,我可以将 R 代码包装在 bash 脚本中 #! 并制作一个加密的(甚至可能是一个有限寿命的)可执行 shell 脚本。在 Windows 下,我有哪些选择可以在类似的线路上做某事?
3 回答
我的回答有点晚了,但我相信这是一个好问题。不幸的是,我认为目前没有解决方案,或者至少是一个简单的解决方案。
困难很常见,因为对于大多数解释语言,包括 R,通常可以打开日志记录并检查所有正在运行的命令。这可以否定许多混淆代码的技巧。
对于那些喜欢认为代码是开放的 == 好的人来说,应该知道混淆代码的一个常见原因是,如果一个人正在与雇用多个供应商的客户进行咨询。客户从供应商 A 处获取脚本并询问供应商 B 为什么它不适用于他们的系统的情况并不少见。(这可能由低级别的 IT 仆从完成,而不是负责 NDA 合同的人。)如果 A 和 B 是竞争对手,A 的代码刚刚交给 B。当脚本 == 严肃的程序时,严肃的代码有被放弃了。
我看到的解决方法是:
- 调用编译语言,并使用那里可用的标准保护。
- 将可执行文件托管在不同的服务器上,并使用对服务器的调用来执行计算。(在 R 中,有多个服务器端选项。)
- 在语言中使用编译(预处理/字节码)代码。
当代码可能被广泛分发时,选项 2 实际上更容易和更好,而不仅仅是出于 IP 原因。一个主要优点是它可以让您升级代码,而无需经历站点范围发布过程的痛苦。如果需要新库,没问题 - 更新服务器。
选项 3 在 Matlab 中使用.p
文件完成,并且可以py2exe
在 Windows 上使用 Python 完成。在 R 中,新的字节码编译可能是类似的,但我对它不够熟悉,无法解决.Rc
R 上下文中.p
的文件和 Matlab 上下文中的文件之间的任何差异。有关编译器的更多信息,请参阅: http: //www.inside-r.org/r-doc/compiler/compile
在服务器上托管计算非常适合与不成熟的用户一起工作,因为它更容易快速迭代以响应错误或功能请求。知识产权保护只是一种好处。
这不是一个专门面向 R 的策略。(而且有点不清楚你的限制或目标到底是什么。)如果你想要一个跨平台的加密方法,你应该研究开源程序 TrueCrypt。它支持创建可以作为卷安装在任何支持卷格式化方法的机器上的加密文件。由于 Mac 可以读取 FAT 文件,我已经在 Mac PC 的鸿沟上对此进行了测试,但对于它在 Linux-PC 鸿沟中的工作方式没有经验。
(他们的 Windows 的 TODO 列表包括;“用于创建卷的命令行选项(已在 Linux 和 Mac OS X 版本中实现)”。因此,如果您不从操作系统。)
我认为这是不可能的,因为 R 解释器必须能够解密和读取代码才能执行它,这意味着使用该解释器的任何人也将能够解密和读取代码。
我绝不是专家,所以我保留对该陈述 100% 错误的权利。
我相信最好的解决方案是确保价值来自贵公司及其雇主提供的专业知识和服务——而不是保守秘密。
如果做不到这一点,您可以尝试将代码分离为客户端/服务器模型。这样,客户端只是发送数据并接收结果——他们永远无法访问在服务器上运行的代码。
然而,我内心的科学家只是说“那个解决方案很糟糕,我永远不会相信在这种条件下提供的结果”。