Ruby需要文件(不是文件)

时间:2012-12-07 16:12:02

标签: ruby file encryption

我有一个加密文件file = File.new("encrypted.file", "r"),我想在解密后在Ruby中要求。我不想解密,保存,要求和删除文件。

我现在所做的是:

str=""
file.each do |line|
     str+=line
end#do

str = doSomeDecryption(str)

我想以某种方式require str。有任何想法吗? eval(str)不是一种选择;它确实必须是“必需的”。

3 个答案:

答案 0 :(得分:1)

严格来说,require不加载文件,加载资源;正确重载内核#require,你几乎可以做任何事情。有些人制作了使用open-uri从远程服务器加载代码的版本。如果要在纯Ruby中实现它,则需要使用eval。有关其实现,请参见http_require(https://github.com/astrails/http_require)。

如果你想将它作为一个扩展来实现,你可以减少潜在的攻击面积,但是你仍然要实现save-to-disk-then-require或{{1 }}。 (严格来说,虽然我目前无法在解释器中找到代码,eval本身基本上会执行require。)

答案 1 :(得分:0)

不存在邪恶的评估:) 我不建议使用它。

答案 2 :(得分:0)

有各种各样的图书馆已经这样做了:

  • RubyGems补丁require以自动激活Gems
  • OCRA,Crate和朋友补丁require从加密的SQLite数据库中的TEXT列加载等。

您可以查看他们如何处理此问题。

Ruby 2.0将有一个API,允许您注册处理程序以挂钩require进程。