如何强制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
相关产品推荐
相关产品推荐

