ASiC ZIP归档加密后解密为空的异常问题求助
问题分析与解决方案
核心原因
你遇到的问题大概率是OpenSSL CMS默认以文本模式处理输入输出,导致二进制格式的ZIP/ASiC-E容器在加密过程中被损坏——文本模式会自动转换换行符(比如Windows下的CRLF转LF),破坏ZIP文件的二进制结构,最终解密后只有残缺的ZIP头,内容丢失。
修正后的命令
在加密和解密命令中添加-binary参数,强制OpenSSL以二进制模式处理文件,避免格式转换:
加密命令
openssl cms -encrypt -binary -in container.zip -out encrypted_data.cms -recip certificate.pem -outform PEM -aes-128-cbc
解密命令
openssl cms -decrypt -binary -inform PEM -in encrypted_data.cms -out decrypted_output.zip -inkey privateKey.pem
注意:解密时
-recip参数是多余的,因为私钥已经明确指定了身份,去掉不影响结果,保留也不会出错。
额外验证步骤
- 先确认原始的
container.zip/container.asice是完整可用的——手动解压验证所有文件(mimetype、file1.xml、META-INF下的清单和签名文件)都存在且正常。 - 加密后检查
encrypted_data.cms的文件大小,合理的大小应该和原ZIP文件接近(加密后会略大)。 - 解密后对比
decrypted_output.zip和原文件的大小,若一致则说明结构未损坏,可正常解压。
内容的提问来源于stack exchange,提问作者Sleepy Ninja
相关产品推荐
相关产品推荐

