You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制OpenSSL输出错误密码解密后的内容?

问题描述

我使用命令加密测试文件:

openssl enc -aes-128-cbc -in test -nosalt -out encprova.aes128

解密时执行:

openssl enc -aes-128-cbc -d -in encprova.aes128 -nosalt

输入正确密码可正常获取文件内容,输入错误密码则会报错:

bad decrypt
009E69DB997F0000:error:1C800064:Provider routines:ossl_cipher_unpadblock:bad decrypt:providers/implementations/ciphers/ciphercommon_block.c:124:

我了解OpenSSL是通过填充有效性判断解密是否成功的,想问有没有办法强制让OpenSSL输出错误密码解密后的内容?

解决方案

有两种可行的方法:

  • 禁用填充验证:在解密命令中添加-nopad参数,跳过填充检查,直接输出解密后的原始字节内容。命令如下:
openssl enc -aes-128-cbc -d -in encprova.aes128 -nosalt -nopad

需要注意的是,就算输入正确密码,最后一块的填充字节也会被保留,你得手动去掉符合PKCS#7标准的填充(比如最后n个字节的值都是n)。

  • 忽略错误捕获输出:用shell重定向把错误信息丢弃,同时保留标准输出。以bash为例:
openssl enc -aes-128-cbc -d -in encprova.aes128 -nosalt 2>/dev/null

这种方式下,哪怕解密时弹出"bad decrypt"错误,OpenSSL依然会把解密内容输出到标准输出,只是错误信息被导向了/dev/null。

内容的提问来源于stack exchange,提问作者Allexj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:21:04