windows上的openssl aes-256加密文件无法在linux上解密

windows上的openssl aes-256加密文件无法在linux上解密,linux,encryption,openssl,aes,echo,Linux,Encryption,Openssl,Aes,Echo,我有一个在windows apache上运行的php文档存储库应用程序,该应用程序将使用以下命令加密任何上载的文档: 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 并

我有一个在windows apache上运行的php文档存储库应用程序,该应用程序将使用以下命令加密任何上载的文档:

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
并在下载时使用以下命令对其进行解密:

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
到目前为止,该应用程序运行良好,人们在服务器上加密的同时上传和下载文件,现在的问题是该应用程序已被移动到apache linux服务器,而在windows上加密的文件在linux上没有正确解密

为什么会这样?是否有可能对decryption命令进行调整,使其再次正确解密该文件

PS:在linux上加密的新文件被正确解密,与在windows中相同,是在windows上编码的在linux上解码失败的情况。

我找到了解决方案:-),问题是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

希望这能帮助别人

您可以使用
-k'MyPass34'
直接指定openssl的密码短语,而不是使用管道。不要忘记,在Linux上,可以使用“ps”命令查看任何进程的参数。最好将密码放在不需要它出现在命令行中的某个地方,或者放在任何可见的位置。