使用 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
我想使用 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