使用 OpenSSL 进行 AES-256-CBC 加解密的 bash Shell 脚本

#!/bin/bash
##############################################################################
# 脚本名称: aes_256_cbc_encrypt_decrypt.sh
# 脚本功能: 使用OpenSSL实现AES-256-CBC算法的字符串加解密
# 加密参数说明:
#   - 密钥(key): 32字节的16进制字符串(AES-256要求密钥长度32字节)
#   - 初始向量(iv): 16字节的16进制字符串(CBC模式要求IV长度16字节)
#   - 模式: AES-256-CBC(分组加密模式)
#   - 输出: Base64编码后的加密字符串
# 使用依赖: 需安装openssl工具(CentOS: yum install openssl -y)
##############################################################################

# ======================== 配置项 ========================
# 待加密的原始字符串(包含多个业务参数)
source_str="USER_INTENRALID=-1        MAC=9c2ea13ee931        USER_IP=168296450        USER_PORT=-1        IN_IP=-1        IN_PORT=-1        USER_ACCESSTIME=1579332881302        PACKETAGETYPE=DNS        HOST=180.153.184.132        IMEI=-1        IMSI=-1        LONGITUDE=-1        LATITUDE=-1        CHANNEL=170000        PATH=LTE=        COOKIE=LTE=        REFERER=LTE=        POSTDATA=djJzLWlvcy55dW50b25ndi5jb20="
 
# AES-256-CBC加密密钥(32字节16进制字符串,共64个16进制字符)
key="f86e92574eaf977469098a59553e2450bec9e4acb1db1a2e2fa35e21bb55dd89"
# 初始向量IV(16字节16进制字符串,共32个16进制字符)
iv="c18d8c0b6f5e54f64ac4a401497ea37f"

# ======================== AES-256-CBC加密 ========================
# openssl enc参数说明:
#   -e: 加密模式
#   -aes-256-cbc: 使用AES-256-CBC算法
#   -a: 输出Base64编码(便于传输和存储)
#   -K: 指定16进制格式的密钥(大写K,区别于小写k)
#   -iv: 指定16进制格式的初始向量
#   -nosalt: 不使用盐值(确保加解密结果固定)
encrypt_str=$(echo -n "${source_str}" | openssl enc -e -aes-256-cbc -a -K ${key} -iv ${iv} -nosalt)
echo -e "加密后的字符串(Base64):\n${encrypt_str}\n"

# ======================== AES-256-CBC解密 ========================
# 修复原脚本错误:解密需使用-d参数,且要移除原错误的-e参数
# openssl enc参数说明:
#   -d: 解密模式(核心修复点)
#   其他参数与加密保持一致,确保加解密参数匹配
decrypt_str=$(echo -n "${encrypt_str}" | openssl enc -d -aes-256-cbc -a -K ${key} -iv ${iv} -nosalt)
echo -e "解密后的原始字符串:\n${decrypt_str}"
Categories: 系统运维