openssl rsautl 输出到 base64

Openssl rsautl output to base64

我在 shell 脚本中有这个命令

echo -n | openssl rsautl -encrypt -pubin -inkey

其中 </code> 代表字符串参数,<code> 是要使用的 public 键。

我希望输出是二进制加密的等效base64字符串,但在命令末尾添加| base64似乎不​​起作用(可能是因为加密输出包含空字符和剪切base64 输入短。

是否可以在不首先创建密文中间文件转储数据的情况下完成base64编码?

例如,我想

echo -n "asdf" | openssl rsautl -encrypt -pubin -inkey key.pub.pem

输出类似

的内容

stWslUhRRCk/bZveABLG7fA8z9ZkYc+lBBd5QhvyGNwuI2T5v2sk8aJL3X3Xerrogsu35Wk5O839..........

而不是二进制不可读字符,无需创建中间文件(为简洁起见,我截断了输出)

首先,我必须声明我无法重现您的问题,这可能取决于 bash 版本。

我知道有两种方法可以将 openssl rsautl 的输出传递给 base64,而不用管道 stdout 和使用文件。

Bash 进程替换

Bash 能够直接将操作的输出传递给某个命令,而程序认为它正在将输出写入文件。

echo "foo"|openssl rsautl -encrypt -pubin -inkey key -out >(base64)

命名管道

您可以创建一个 命名管道 使用 mkfifo 命令然后使用它,就好像它是一个文件一样。

mkfifo /tmp/mypipe
echo "foo" | openssl rsautl -encrypt -pubin -inkey key -out /tmp/mypipe &
base64 /tmp/mypipe
rm /tmp/mypipe
echo "foo" | openssl rsautl -encrypt -inkey rsa_key.pub -pubin | openssl base64

openssl base64 将二进制加密代码作为输入并生成人类可读格式的 base64。