Openssl 解密不起作用
Openssl decryption not working
我正在尝试使用 openssl
从命令行输入 encrypt
和 decrypt
文本。我可以 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$
我正在尝试使用 openssl
从命令行输入 encrypt
和 decrypt
文本。我可以 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$