【问题标题】:open3 popen3 binary dataopen3 popen3 二进制数据
【发布时间】:2011-01-20 23:27:17
【问题描述】:

我正在尝试通过 popen3 发送二进制数据,但出现错误。

我发出的 shell 命令是:

key = File.open('path.key').read
Open3.popen3("openssl pkcs8 -inform DER -outform PEM -passin pass:#{password}") do |stdin,  stdout, stderr|
  stdin.print(key)
  unless (err = stderr.read).empty? then raise err end
  stdout.read
end

其中 key 是一个二进制文件。 OpenSSL 说密钥无效,我在摸不着头脑。

现在,如果我通过让 OpenSSL 直接从文件系统读取命令而不是通过标准输入传递命令来发出命令,它可以正常工作

"openssl pkcs8 -in path.key -inform DER -outform PEM -passin pass:#{password}"

是否存在我不知道的编码问题?或者这根本不可能。由于我将通过 web 服务接收密钥文件,因此我宁愿不必将它们保存到磁盘并让 openssl 读取它们,而是在内存中完成整个过程。

感谢您的宝贵时间

【问题讨论】:

    标签: ruby


    【解决方案1】:

    试试这个:

    Open3.popen3("openssl pkcs8 -inform DER ...") do |stdin,  stdout, stderr|
      stdin.reopen(File.open('path.key', 'rb'))
      unless (err = stderr.read).empty? then raise err end
      stdout.read
    end
    

    不要将文件读入字符串,而是将进程的标准输入重新打开为文件。另外,为了安全起见,请以二进制模式打开它(注意File.open 调用中的rb 模式)

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 2023-04-07
      • 2014-10-09
      • 2015-06-25
      • 2016-12-25
      • 2013-02-08
      • 2016-05-31
      • 2015-10-22
      • 2014-11-20
      相关资源
      最近更新 更多