Windows上的openssl aes-256加密文件无法在linux上解密
收藏

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

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上没有正确解密。
这是为什么?解密命令是否有可能进行调整,以便再次正确地解密该文件?
注:在Linux上加密的新文件被正确解密,与在Windows中一样,是在Linux上解码失败的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

希望这能帮助别人!

公众号