使用OpenSSL解密AES-ECB-256加密密码报错,求正确解密方法
AES-256-ECB解密错误修复方案
已知信息
加密参数与密文:
##PASS_16## oRnS7llE9q3utIvyP1rbK4OPVDjOPdEss36jsgu/Yvfh9yx0qR530oV8eLH9fxw2 AES-ECB-256 Key : thisIsTheSharedKeyIShouldKeepOK!
密钥文件key.txt内容:
thisIsTheSharedKeyIShouldKeepOK!
十六进制密钥hex_key.txt内容:
7468697349735468655368617265644b65794953686f756c644b6565704f4b21
错误原因
使用echo输出密文时,默认会在末尾添加换行符,导致Base64解码后的密文多了1个字节,破坏了AES要求的16字节块对齐(AES块大小固定为16字节,密文长度必须是16的整数倍),因此触发wrong final block length错误。
正确解密步骤
1. 修正Base64解码(避免添加换行)
用printf替代echo,它不会自动添加换行符:
printf "oRnS7llE9q3utIvyP1rbK4OPVDjOPdEss36jsgu/Yvfh9yx0qR530oV8eLH9fxw2" | base64 -d > decoded_cipher.txt
2. 执行解密命令
使用十六进制密钥解密:
openssl enc -aes-256-ecb -d -in decoded_cipher.txt -out decrypted.txt -K 7468697349735468655368617265644b65794953686f756c644b6565704f4b21 -nopad
或者直接一步完成(无需保存中间文件):
printf "oRnS7llE9q3utIvyP1rbK4OPVDjOPdEss36jsgu/Yvfh9yx0qR530oV8eLH9fxw2" | base64 -d | openssl enc -aes-256-ecb -d -K 7468697349735468655368617265644b65794953686f756c644b6565704f4b21 -nopad
如果想用明文密钥文件解密,命令如下:
printf "oRnS7llE9q3utIvyP1rbK4OPVDjOPdEss36jsgu/Yvfh9yx0qR530oV8eLH9fxw2" | base64 -d | openssl enc -aes-256-ecb -d -pass file:key.txt -nopad
验证结果
执行后打开decrypted.txt或查看终端输出,即可得到符合PASS_16{字母数字内容}或纯字母数字格式的明文。
内容的提问来源于stack exchange,提问作者Ekel
相关产品推荐
相关产品推荐

