2011-01-20 93 views
3

解密我有運行Windows的PHP文件儲存庫應用程序APACHE,這個應用程序將AES加密使用以下命令任何上傳的文件:OpenSSL的AES-256加密對Windows文件不能在Linux上

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -salt -in somefile.pdf -out somefile.pdf 

和還解密,這些被下載的時候,用下面的命令:

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -d -in somefile.pdf -out decriptedfile.pdf 

應用程序已經工作的罰款,到目前爲止,人們上傳和下載的文件,而他們將保留在服務器上加密的,現在的問題是這樣的應用程序h作爲已被轉移到Apache的Linux服務器,現在在Windows上加密的文件沒有在Linux上正確解密。

這是爲什麼?是否有可能調整解密命令,以便它再次正確解密該文件?

PS:即在Linux加密新的文件被正確地解密,相同的窗口,是發生故障的編碼上窗口解碼-上的Linux的情況。

回答

6

我發現溶液:-),問題是窗戶回聲命令添加三個字符密碼的末尾,即是空間,CR和LF字符,以及Linux echo命令似乎不喂這些字符等openssl命令沒有收到用於加密的相同密碼。

解決方法是在Linux中將這三個字符添加到密碼中,這是可能的,因爲echo命令具有用於插入十六進制值的轉義序列。所以,按照我的示例,正​​在爲我工​​作的正確解密命令linux是:

echo $'MyPass34\x20\x0d\x0a' | /usr/bin/openssl aes-256-cbc -pass stdin -d -in somefile.pdf -out decriptedfile.pdf 

希望這可以幫助別人!

+0

你可以用`-k「MyPass34'`直接指定密碼OpenSSL的,而不是使用管道。 – caf 2011-01-21 05:40:21