我想使用open.l使用public.key加密参数,并使用linux命令行使用private.key解密。但要求是加密后的输出应该只在一行中,以便我可以将其传输或发送到其他服务器。不需要将文件创建为输出。
我见过rsautl,但它在文件或十六进制转储中提供输出,这在我的情况下是不可能的,因为我需要输出一行。请提供必要的帮助。
答案 0 :(得分:1)
pkeyutl
仅在您要求时将其输出发送到文件。如果未指定输出文件(使用-out
选项),则会将其输出发送到标准输出。但由于它是二进制的,你不能轻易地操纵它,而且,它可能是输出流中有行尾。
为了解决这个问题,您可以将pkeyutl
的输出传递给base64
。如果您的base64
版本包装其输出,则必须连接以仅在一行上获得结果。某些版本(例如GNU coreutils 8.10
)具有-w0
选项,可防止换行并生成单行输出(无行末尾)。 openssl
版本1.0.2a
的示例:
echo "foo" | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0
其中bob_id_rsa.pub
是openssl
格式的bob公钥。您可以使用以下方式解密:
base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa
其中bob_id_rsa
是bob的私钥。加密后完成解密的完整示例:
bar=$( echo foo | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 )
cue=$( echo $bar | base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa )
echo $cue
foo