OpenSSL rsautl输出到base64

use*_*010 2 encryption bash rsa

我在shell脚本中有此命令

echo -n $2 | openssl rsautl -encrypt -pubin -inkey $1

其中,$2代表字符串参数,$1是要使用的公钥。

我希望输出为二进制加密的等效base64字符串,但| base64在命令末尾添加似乎无效(可能是因为加密输出包含空字符并缩短了base64输入。

是否可以在不创建用于将数据转储为第一位的密文中间文件的情况下完成base64编码?

例如,我想

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

输出类似的东西

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

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

mat*_*mat 5

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

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

Bash流程替代

当程序认为将命令的输出写入文件时,Bash可以将操作的输出直接传递给某些命令。

echo "foo"|openssl rsautl -encrypt -pubin -inkey key -out >(base64)
Run Code Online (Sandbox Code Playgroud)

命名管道

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

mkfifo /tmp/mypipe
echo "foo" | openssl rsautl -encrypt -pubin -inkey key -out /tmp/mypipe &
base64 /tmp/mypipe
rm /tmp/mypipe
Run Code Online (Sandbox Code Playgroud)