Openssl 解密不起作用

Openssl decryption not working

我正在尝试使用 openssl 从命令行输入 encryptdecrypt 文本。我可以 encrypt 文本,但无法 decrypt 返回。

以下是我如何从命令行加密我的文本:

➜  ~  echo -n 'Foo Bar' | openssl enc -aes-128-ecb  -K 123456789 | openssl enc -base64

以上命令给出了以下输出:

RxmxBbcIFm5ZMiQIBYDr4Q==

以下是我试图解密文本的方式:

➜  ~  echo -n 'RxmxBbcIFm5ZMiQIBYDr4Q==' | openssl enc -aes-128-ecb  -K 123456789 | openssl enc -base64 -d

当我运行执行上述命令时,屏幕上没有显示任何输出:

➜  ~

知道如何从终端解密代码吗?

谢谢

这部分:

openssl enc -aes-128-ecb  -K 123456789

输出原始数据。当您尝试解密它时,您正在添加 -base64。输出不是 base64,因此失败。在您的特定情况下,您的意思似乎是:

echo -n 'Foo Bar' | openssl enc -aes-128-ecb  -K 123456789 | openssl enc -aes-128-ecb -d -K 123456789

要加密输出base64,你需要:

echo -n 'Foo Bar' | openssl enc -aes-128-ecb  -K 123456789 -base64

要解密并接受base64,你需要:

echo 'RxmxBbcIFm5ZMiQIBYDr4Q==' | openssl enc -d -aes-128-ecb -K 123456789 -base64

正如 user1516873 指出的那样,要使用 base64 输入,您需要一个尾随换行符,所以不需要 -n,但这不是您代码中的主要问题。它只适用于Base64,一般不用于加解密。您也可以使用 -A 而不传递换行符。 -base64-a 相同,后者需要一个 multi-line base64 块,而 -A 需要全部在一行中(因此不需要 \n)。

echo 命令中的 -n 标志有问题。 openssl 需要 \n 符号才能成功解密。

比较

$ echo 'Foo Bar' | openssl enc -e -aes-128-ecb -base64 -K 123456789
eoGjHSco3ee2nOjibu7a3g==

echo -n 'Foo Bar' | openssl enc -e -aes-128-ecb -base64 -K 123456789
RxmxBbcIFm5ZMiQIBYDr4Q==

所以它同时影响加密和解密。

$echo eoGjHSco3ee2nOjibu7a3g== | openssl enc -d -base64 -aes-128-ecb  -K 123456789
Foo Bar
$

echo RxmxBbcIFm5ZMiQIBYDr4Q== | openssl enc -d -base64 -aes-128-ecb -K 123456789 
Foo Bar$