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

标签 linux encryption openssl aes echo

我有一个在 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 中一样,是 encoded-on-windows decoded-on-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

希望这可以帮助别人!

关于linux - windows上的openssl aes-256加密文件无法在linux上解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745029/

相关文章:

java - 关于 PCI-DSS 合规性 - 文件加密

windows - OpenSSL 在 PKCS12 导出期间挂起, "Loading ' 屏幕'进入随机状态“

ssl - http2:在nginx中发送请求时SSL读取失败

c++ - 提升测试和异步 IO : memory access violation at address : no mapping at fault address

sql-server - 使用 T-SQL 在 Linux 上获取 sql server 默认备份文件夹

java - 使用 PGP 公钥 block 的实例 PGPPublicKey

encryption - openssl s_client 和 s_server 密码不匹配

database - RSA 私钥和公钥的最大长度是多少?

linux - 安装 php-devel centos

使用 PROMPT_COMMAND 时,Python venv 模块无法将虚拟环境名称添加到 PS1?