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

时间:2011-01-20 08:48:05

标签: 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
到目前为止,应用程序一直运行正常,人们在服务器上保存加密时上传和下载文件,现在的问题是这个应用程序已被移动到apache linux服务器,现在加密的文件在Windows上没有正确解密在Windows上。

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

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

1 个答案:

答案 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

希望这可以帮助别人!

相关问题