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

Nel*_*son 3 linux encryption openssl aes echo

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

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -salt -in somefile.pdf -out somefile.pdf
Run Code Online (Sandbox Code Playgroud)

并在下载时解密它们,并使用以下命令:

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -d -in somefile.pdf -out decriptedfile.pdf
Run Code Online (Sandbox Code Playgroud)

到目前为止,应用程序工作正常,人们在服务器上保存加密时上传和下载文件,现在的问题是这个应用程序已被移动到apache linux服务器,现在在Windows上加密的文件是在linux上没有正确解密.

为什么是这样?是否可以对decryption命令进行调整,以便再次正确解密这些文件?

PS:在Linux上加密的新文件被正确解密,与在windows中一样,是在windows上解码的解码失败的情况.

Nel*_*son 6

我找到了解决方案:-),问题是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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助别人!