我有一个在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
到目前为止,应用程序一直运行正常,人们在服务器上保存加密时上传和下载文件,现在的问题是这个应用程序已被移动到apache linux服务器,现在加密的文件在Windows上没有正确解密在Windows上。
这是为什么?是否可以调整解密命令,以便再次正确解密这些文件?
PS:在linux上加密的新文件被正确解密,与在Windows中一样,是在Windows上解码的解码失败的情况。
答案 0 :(得分: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
希望这可以帮助别人!