我正在使用encrypt
从命令行尝试decrypt
和openssl
文本。我可以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
当我运行上述命令时,我没有在屏幕上显示任何输出:
➜ ~
知道如何从终端解密代码吗?
由于
答案 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$