首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >open3 popen3二进制数据

open3 popen3二进制数据
EN

Stack Overflow用户
提问于 2011-01-21 07:27:18
回答 1查看 1K关注 0票数 1

我试图通过popen3发送二进制数据,但是我得到了一个错误。

我发出的shell命令是:

代码语言:javascript
复制
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直接从文件系统读取它,而不是通过标准输入传递它,它就能正常工作

代码语言:javascript
复制
"openssl pkcs8 -in path.key -inform DER -outform PEM -passin pass:#{password}"

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

谢谢您抽时间见我

EN

回答 1

Stack Overflow用户

发布于 2011-01-21 16:54:53

试试这个:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4753858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档