Openssl解密不起作用

时间:2016-01-18 15:44:02

标签: encryption openssl cryptography

我正在使用encrypt从命令行尝试decryptopenssl文本。我可以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

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

➜  ~

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

由于

2 个答案:

答案 0 :(得分:1)

这部分:

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相同,期望多行base64块,而-A期望它在一行上(所以不需要\ n)。

答案 1 :(得分:1)

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$