openssl aes-256encryption文件在Windows上不能解密在Linux上

我有一个PHP文件存储库应用程序运行在Windows Apache,这个应用程序将使用下面的命令encryption任何上传的文件:

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 

到目前为止,应用程序一直在正常工作,人们正在上传和下载他们的文件,而他们在服务器上保持encryption,现在的问题是这个应用程序已被移动到一个Apache的Linux服务器,现在在Windows上encryption的文件是没有正确解密在Linux上。

为什么是这样? 是否有可能调整解密命令,所以它正确地解密该文件?

PS:在Linux上encryption的新文件被正确解密,与在Windows中一样,是在Windows上编码解码的情况下,失败。

我找到了解决办法:-),问题是windows echo命令在密码的末尾添加了三个字符,即空格,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 

希望这可以帮助别人!