Openssl rsautl输出到base64

时间:2017-05-23 04:11:28

标签: bash encryption rsa

我在shell脚本中有这个命令

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

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

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

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

例如,我想制作

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

输出

的内容
  

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

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

2 个答案:

答案 0 :(得分:4)

首先,我必须声明我无法重现您的问题,它可能取决于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

答案 1 :(得分:0)

first = ['one', 'two', 'three', 'four']
second = ['two', 'one', 'three']
result = bool(set(first) & set(second))
print(result)

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