我试图通过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}"有没有我不知道的编码问题?或者这根本是不可能的。由于我将通过not服务接收密钥文件,因此我不希望将它们保存到磁盘并让openssl读取它们,而是在内存中完成整个过程。
谢谢您抽时间见我
发布于 2011-01-21 16:54:53
试试这个:
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模式)。
https://stackoverflow.com/questions/4753858
复制相似问题