如何将字符串(不是文件)传递给 openssl?

Nit*_*kar 7 openssl

我想使用 openssl 加密一堆字符串。如何将控制台中的明文传递给 openssl(而不是指定具有明文的输入文件)。

openssl 手册页只有这两个与输入/输出相关的选项:

-in <file>     input file
-out <file>    output file
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止尝试过的:

这工作正常,

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt -out encrypted.txt
Run Code Online (Sandbox Code Playgroud)

如果我省略 -out 参数,我会在控制台中得到加密字符串,

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt
Run Code Online (Sandbox Code Playgroud)

但是如果我同时省略 -in 和 -out,我会收到一个错误 - 未知选项“加密我”,

openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 "Encrypt ME"
Run Code Online (Sandbox Code Playgroud)

cha*_*aos 11

用这个:

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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用命令替换:

user@host:~$ openssl aes-256-cbc -a -K 00000000000000000000000000000000 -iv \
00000000000000000000000000000000 -in <(echo "my string to encrypt") -out encrypted.txt
Run Code Online (Sandbox Code Playgroud)

  • 在此处的所有答案中,使用 echo 时不带“-n”选项,因此它将包含一个尾随换行符,该换行符将包含在哈希输入中。 (2认同)