2016-01-18 101 views
0

我正在嘗試使用openssl來自命令行的encryptdecrypt文本。我能夠encrypt的文字,但我不能decrypt它回來。Openssl解密不能正常工作

這裏是我如何加密命令行我的文字:

➜ ~ 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 

當我運行上述命令,我沒有得到任何輸出顯示在屏幕上:

➜ ~ 

任何想法如何從終端解密代碼?

由於

回答

1

問題在-n標誌中echo命令。 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$ 
+0

謝謝你工作得很好。 – Reboot

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)。

+0

喜羅布,如果我刪除'-base64'然後我得到以下輸出'EDK#GG [2 「h8Nr%'。我怎樣才能得到可讀格式的輸出。謝謝 – Reboot