使用openssl加密参数

时间:2015-08-25 15:10:12

标签: security encryption openssl

我想使用open.l使用public.key加密参数,并使用linux命令行使用private.key解密。但要求是加密后的输出应该只在一行中,以便我可以将其传输或发送到其他服务器。不需要将文件创建为输出。

我见过rsautl,但它在文件或十六进制转储中提供输出,这在我的情况下是不可能的,因为我需要输出一行。请提供必要的帮助。

1 个答案:

答案 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.pubopenssl格式的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