使用 openssl 加密参数

Encrypting a parameter with openssl

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

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

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 是 bob 的 public 键 openssl 格式。您可以解密:

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