我在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 ..........
而不是二进制不可读字符,无需创建中间文件(为简洁起见,我截断了输出)
答案 0 :(得分:4)
首先,我必须声明我无法重现您的问题,它可能取决于bash版本。
我知道有两种方法可以将openssl rsautl
的输出传递给base64而不使用stdout并使用文件。
当程序认为,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。