在Windows上使用openssl aes-256加密的文件无法在Linux上解密

3
我有一个运行在Windows Apache上的PHP文档存储库应用程序,该应用程序将使用以下命令对上传的任何文档进行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上无法正确解密。

为什么会出现这种情况?是否有可能调整解密命令以便正确地解密这些文件?

PS:在Linux上加密的新文件可以正确解密,与Windows上的情况相同,只有在Windows上编码后在Linux上解码的情况出现了问题。

1个回答

6
我找到了解决方案:问题在于Windows的echo命令会在密码末尾添加三个字符,即空格、回车和换行符,而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的密码短语,而不是使用管道。 - caf
1
不要忘记,在Linux上,可以使用“ps”命令查看任何进程的参数。最好将密码放在不需要在命令行或任何可见位置中输入的地方。 - Julie in Austin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接