我有一个在 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上解码的情况失败了。
我找到了解决方案:-),问题是 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
希望这可以帮助别人!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)