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

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

我想使用 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'

相关内容