我想使用 openssl 加密一堆字符串。如何将控制台中的明文传递给 openssl (而不是指定具有明文的输入文件)。
openssl 手册页只有这两个与输入/输出相关的选项:
-in <file> input file
-out <file> output file
这是我到目前为止所尝试过的:
这工作正常,
openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt -out encrypted.txt
如果我省略 -out 参数,我会在控制台中得到加密的字符串,
openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt
但是如果我省略 -in 和 -out,我会得到一个错误 - 未知选项“加密我”,
openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 "Encrypt ME"
答案1
用这个:
user@host:~$ echo "my string to encrypt" | openssl aes-256-cbc -e -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000
a7svR6j/uAz4kY9jvWbJaUR/d5QdH5ua/vztLN7u/FE=
user@host:~$ echo "a7svR6j/uAz4kY9jvWbJaUR/d5QdH5ua/vztLN7u/FE=" | openssl aes-256-cbc -d -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000
my string to encrypt
或者您可以使用命令替换:
user@host:~$ openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv \
00000000000000000000000000000000 -in <(echo "my string to encrypt") -out encrypted.txt
这些标志记录在手册页中man openssl-enc
:
-a
:base64处理数据。这意味着,如果进行加密,数据将在加密后进行 Base64 编码。如果设置了解密,则输入数据在解密之前先进行 Base64 解码。-d
:解密输入的数据。-e
:对输入数据进行加密-K
:实际使用的密钥:必须表示为仅由十六进制数字组成的字符串。如果仅指定了密钥,则必须使用 -iv 选项另外指定 IV。当同时指定密钥和密码时,将使用通过 -K 选项给出的密钥,并采用从密码生成的 IV。同时指定密钥和密码可能没有多大意义。-iv
:要使用的实际 IV:必须表示为仅由十六进制数字组成的字符串。当使用 -K 选项仅指定键时,必须显式定义 IV。当使用其他选项之一指定密码时,IV 将从该密码生成。
答案2
关于什么
echo encrypt Me | openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000
如果您担心 ps 会显示纯文本“加密我”,那么您最好坐下来处理文件,小心地删除它们。
答案3
输入多行输入,使用ctrl+d结束。e='e'
为了隐私,将清除环境变量。
e=$(cat); echo "$e" | openssl enc -aes-256-cbc -e -a; e='e'