我正在R中编写一个包,并希望保护/加密代码。基本上,在查看我的包代码时,它应该是加密的而且不可读。我读过有人加密了他的代码(1),但我还没有找到更多相关信息。我知道我可以用C / C ++编写代码并编译它,但是我想让它在R中只是" protect "它在那里。
我的问题是:这可能吗,这怎么可能?
感谢您的回答!
参考:
(1)link
答案 0 :(得分:16)
您是否尝试过该主题?
https://stat.ethz.ch/pipermail/r-help/2011-July/282717.html
在某些时候,R代码必须由R解释器处理。如果你给某人加密代码,你必须给他们解密密钥,以便R可以运行它。也许你可以隐藏某个地方的钥匙,并希望他们找不到它。但是他们必须能够访问它才能以某种方式生成纯文本R代码。
对于您在计算机上运行或查看的所有程序或文件都是如此。加密的PDF文件?不,它们只是混淆,一旦找到解密密钥,您就可以解密它们。甚至用C或C ++编写的以二进制文件形式编写的代码也可以通过足够的时间,工具和足够聪明的黑客进行逆向工程。
您希望它受到保护,您将其保留在您的服务器上,并且只允许通过网络API进行访问。
答案 1 :(得分:4)
我最近不得不做类似的事情,这并不容易。但我设法完成了它。可以模糊和/或加密脚本。问题是,你有时间投入吗?您需要确保混淆/加密"您使用的方法非常困难且耗时,并且它不会减慢脚本的执行时间。
如果您希望快速加密Rscript代码,可以使用this site进行加密。
我使用上述网站测试了以下rcode,它产生了一个非常令人生畏的输出,它以某种方式工作:
#!/usr/bin/env Rscript
for (i in 1:100){
if (i%%3==0) if (i%%5==0) print("fizzbuzz") else print("fizz") else
if (i%%5==0) print("buzz") else
print(i)
}
如果您确实有时间在手上并且希望使用自己的即兴方法自行加密脚本,那么您将要使用 openssl命令。为什么?因为它似乎是大多数(如果不是全部)Unix系统中可用的加密工具之一。我已经验证它存在于Linux(ubuntu,centos,redhat,mac)和AIX上。
使用Openssl加密文件或脚本的最简单方法是:
1. cat <your-script> | openssl aes-128-cbc -a -salt -k "specify-a-password" > yourscript.enc
OR
2. openssl aes-128-cbc -a -salt -in <path-to-your-script> -k "yourpassword"
使用Openssl解密脚本(请注意&#39; -d&#39;):
1. cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > yourscript.dec
OR
2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > yourscript.dec
这里的诀窍是自动提供密码,这样用户每次想要运行脚本时都不需要指定密码。或许这就是你想要的?