2011-01-20 10 views
3

に復号化することがカント私は、WindowsのApache上で実行されているPHPのドキュメントリポジトリアプリケーションを持って、このアプリケーションは、AES暗号化されます、次のコマンドを使用して、任意のアップロードされたドキュメントを:のopenssl AES-256のウィンドウ上の暗号化されたファイルは、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の場合です。スペース、CRとLF文字です

答えて

6

私は解決策が:-)、問題は、Windows echoコマンドで見つかったパスワードの末尾に3つの文字を追加、およびLinuxのechoコマンドは、これらの文字を供給し、そうではないようですopensslコマンドは暗号化に使用されたのと同じパスワードを受け取っていません。

解決策は、Linuxのパスワードに3文字を追加することでした。これは、echoコマンドに16進値を挿入するエスケープシーケンスがあるためです。私の例に従うと、現在では私のために働いている正しいdecryptコマンドLinuxは:

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

これは誰かを助けることができますか?

+0

あなたは、直接ではなくパイプを使用するよりも、パスフレーズにOpenSSLを指定するMyPass34''」 '-k使用することができます。 – caf

+1

は、Linux上で、「PS」コマンドを使用して任意のプロセスのパラメータを表示することが可能であることを忘れないでください。それはEVERコマンドラインで、または任意の目に見える場所にあるように、それを必要としない、パスワードのどこかに置く方が良いでしょう。 –

関連する問題