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