用OpenSSL解密大体积AES-256-CBC加密数据出现乱码如何解决?
AES-256-CBC大体积数据解密乱码问题解决
加密信息
- 加密算法:AES-256-CBC
- 加密数据(Base64编码):
7dS560FiDJvUji7c+ky/9nQp+HwK3SEOkY4zefqlFuEyF2/vevrv8K4GJNr2zxD7+j28RK97LmaHjwY9F+/feO6T2DAQuJQsT3wp/fKCPyErwZggsE+ufzvEJZK/XObR8CdbBe8EGZC//JsuMo7MV6SSe267jp4U2iIz4xIFxUlFVy9QcjTr6AUJZdVogedreBgy3/q/isAqOvwoHuj74MV5gkfaXWvmqESjMF4s5wMsYmS1WuBWOR6rw+TSwuL52CiVC5arHuJJEKuodO58bJ+1Ip9uelUIOETswiZmZB6gpTkbos7ij0BpJregejT+9vsDO1tB7+QpByMqeeEbEiSp4N833Z29WmVmy+HpxdZvOPIJ2pyelVhRVPPs/V7VREs4v8/e3X1jR0saA1sSyKYNgIGZUWaQTJwBNi87IPkGiUtyhPnrrKh+BighshJi+Jd+s3+sTYM5CaADvaGhm3wx96rBQi2So+NmFcm5cQa4jRA4S8sLGHmniUO0iiEcxQ2FvlGt+0PBqdbCPewBgOHdjpBUYjs1oR4pV5VjbjTfuIh75G7TS6TZT/gMewJXOXPw88zsSgjXVjRK0obOXaJBKABJ8AqKbKULWHoeMuWW4OdiSZ7mNVt6N40LK/u12vpqWU7Wt5XbSeE3arJPjljEV7WhafKvIOHFx+cK0wB9LQnFUrx/FTLL5HDDEkhnVkm02vxXSFKDwP36VgQnPpvOnY5fbJUTyjnwJcO8I9/H1hYwzPRhos2eNAdHZ3aMysU8zSobwUVto9GnQrvVmVURFyEX6fwifkrf2DTfCsDNSsHt4DLCtsszABKTwTezUoBesNkndk/Qkcd13GEZjTHoyP2tLp85nYwbwI6P+yr1jeu9v3ocN5p0LWPXdwlyTo55WeYkGzlJLsM6d9sut1qlcyQ2AZ536+eYFAIURJkmSexwfbdRebwckvqURRO3a55WCbLxVARKDHnyfculr/ndwyZF7J0RX4G1KcwSgfRdnBpUCkpGeQRImv5Ry5RYXwp5XfKQDrGTCEhV3XtDBD4b2eTxw4KwgJUq9T6IQjNNyPyDwM5AFxS2Y+4wAA0PA2iADfVe3kZrOKYpZvVn0Q==
- 密钥(Base64编码):
uHe2MCmggLlugpGBiMVuXTck7OT8Nk8g
- 初始化向量(IV,Base64编码):
LNP8U7pc6GjxzxAtgw4s3A==
尝试的操作
解码密钥/IV的命令(仅处理了IV)
iv=$( cat response.json | jq .iv -r | openssl base64 -d | xxd -p | tr -d '\n' )
解密命令
openssl aes-256-cbc -d -in data.enc -out data.dec -K $key -iv $iv
错误结果
解密后得到乱码,示例:
^GÌ<8a>û)F"PEi~^K±jÔ^AcWSM 23NDwSOqovXSFGNfy3WatkCreYRd7kcWSM";
解决步骤
确保密钥和IV正确解码为十六进制
你只处理了IV的解码,密钥也需要按同样方式解码:# 解码密钥 key=$(echo "uHe2MCmggLlugpGBiMVuXTck7OT8Nk8g" | openssl base64 -d | xxd -p | tr -d '\n') # 解码IV(若从response.json读取,替换echo内容即可) iv=$(echo "LNP8U7pc6GjxzxAtgw4s3A==" | openssl base64 -d | xxd -p | tr -d '\n')验证长度:AES-256密钥解码后应为64位十六进制(32字节),IV应为32位十六进制(16字节)。
处理Base64格式的加密数据
如果data.enc中存储的是Base64编码的字符串,需要让OpenSSL自动处理Base64,添加-base64参数:openssl aes-256-cbc -d -base64 -in data.enc -out data.dec -K $key -iv $iv清理加密数据中的多余格式
若Base64数据包含换行或空格,先清理后再解密:tr -d '\n' < data.enc > data_clean.enc openssl aes-256-cbc -d -base64 -in data_clean.enc -out data.dec -K $key -iv $iv验证填充方式
AES-CBC默认使用PKCS#7填充,如果加密时采用了其他填充方式,需添加-nopad参数,之后手动处理填充数据,但绝大多数场景下默认填充方式是兼容的。
内容的提问来源于stack exchange,提问作者anton_valii_cto
相关产品推荐
相关产品推荐

