我正在尝试使用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
当我运行上面的命令时,屏幕上没有显示任何输出:
➜ ~
知道怎么从终端解密密码吗?
谢谢
发布于 2016-01-18 08:04:56
-n标志在echo
命令中出现问题。openssl需要成功解密所需的符号。
比较
$ 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$
发布于 2016-01-18 08:03:38
本部分:
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)。
https://stackoverflow.com/questions/34858655
复制相似问题