我有一个命令cat hash.bin | openssl pkeyutl -sign -inkey privk.pem
可以正确获得结果。
现在我想用python subprocess
来做,我这样做(从hash.bin读取hash
)
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey ', prvk]
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out = p.communicate(input=hash)[0]
print(out)
但是openssl失败了。
我无法使用-in
和-out
,因为我的代码无法访问硬盘..
答案 0 :(得分:1)
问题是由inkey
命令后面的杂散空格字符引起的。
尝试删除空格,它应该有效:
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey', prvk]
原因是Popen()
作为-inkey
选项令牌的一部分传递空格字符。 openssl决定没有名为-inkey
的选项(带空格),因此退出。就像您从命令行执行此操作一样:
cat hash.bin | openssl pkeyutl -sign '-inkey ' privk.pem
失败了。