外观
响应数据加密拦截器 🔐
功能介绍 💡
WARNING
响应数据加密拦截器就像一个加密邮差,负责在数据返回给客户端之前对其进行加密处理。在高安全要求的系统中,它通过对响应数据进行加密来保护敏感信息,防止数据在传输过程中被窃取或篡改。
核心特性
- 🔒 支持多种高安全性加密算法:
3DES
、SM4
- 📦 加密数据统一通过
data
字段返回 - ✅ 使用
encrypt: true
标识数据已加密
加密算法说明 🔒
3DES加密
- 加密方式:3DES(Triple DES)加密算法
- 加密模式:CBC(Cipher Block Chaining)模式
- 填充方式:PKCS5Padding
- 密钥长度:24字节(192位)
- IV处理:随机生成IV,并在密文第一个字节存储IV长度,后面跟着IV和实际密文
- 加密流程:对象 → JSON字符串 → 3DES加密
- 响应格式:加密后的数据通过
data
字段返回,并设置encrypt: true
标识
SM4加密
- 加密方式:SM4(国密算法)加密算法
- 加密模式:CBC(Cipher Block Chaining)模式
- 填充方式:PKCS5Padding
- 密钥长度:16字节(128位)
- IV处理:随机生成IV,并在密文第一个字节存储IV长度,后面跟着IV和实际密文
- 加密流程:对象 → JSON字符串 → SM4加密
- 响应格式:加密后的数据通过
data
字段返回,并设置encrypt: true
标识
加解密示例
go
// 加密示例
plaintext := []byte(`{"userId":"12345","username":"admin","token":"xxx"}`)
key := []byte("a748d0d6a748d0d6a748d0d6") // 24字节密钥
ciphertext, err := Encrypt3DES(plaintext, key)
// ciphertext格式:[IV长度(1字节)][IV(8字节)][密文]
// 解密示例
plaintext, err := Decrypt3DES(ciphertext, key)
// plaintext: {"userId":"12345","username":"admin","token":"xxx"}
详细配置说明 ⚙️
核心参数说明
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
enabled | boolean | 否 | false | 是否启用拦截器 |
rules | array[object] | 是 | - | 加密规则配置列表 |
加密规则配置详解 (rules)
参数名 | 类型 | 必填 | 说明 | 示例值 |
---|---|---|---|---|
urls | array[string] | 是 | 需要进行加密的URL地址列表 | /demo/get |
encrypt-type | string | 否 | 加密算法类型,支持DES3 、SM4 | DES3 |
secret | string | 是 | 数据加密密钥(DES3算法要求24位,SM4算法要求16位) | a748d0d6a748d0d6a748d0d6 |
forbid-urls | array[string] | 否 | 排除不需要加密的URL地址 | /demo/public/** |
type | string | 否 | 验证类型,支持merchant (按商户验证) | merchant |
merchant-secret | map[string][string] | 否 | 商户密钥映射,key为商户ID,value为密钥 | {"1001": "key1", "1002": "key2"} |
配置示例 📋
基础配置
yaml
gateway:
filter:
response-encrypt:
enabled: true # 启用响应加密
rules:
- urls:
- /demo/get # 需要加密的地址
secret: a748d0d6a748d0d6a748d0d6 # 加密密钥
高级配置
yaml
gateway:
filter:
response-encrypt:
enabled: true # 启用响应加密
rules:
- urls:
- /api/** # 所有API接口
secret: a748d0d6a748d0d6a748d0d6
forbid-urls:
- /api/public/** # 排除公开接口
商户验证配置
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
- urls:
- /api/merchant/**
type: merchant # 启用商户验证
merchant-secret: # 商户密钥配置
"1001": "D5E5F589769DA629A2F8C344F4749C0A" # 商户1001的密钥
"1002": "E6F6F690870EB73B3F9D455G5850D1B" # 商户1002的密钥
forbid-urls:
- /api/merchant/public/** # 排除公开接口
完整配置示例
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 3DES加密 - 用户敏感数据
- urls:
- /api/user/profile/**
- /api/user/account/**
- /api/auth/login
encrypt-type: DES3
secret: user_data_key_24_bytes_long # 24字节密钥
# SM4加密 - 支付交易数据
- urls:
- /api/payment/**
- /api/transaction/**
- /api/wallet/**
encrypt-type: SM4
secret: payment_sm4_key_1 # 16字节密钥
forbid-urls:
- /api/payment/methods/** # 支付方式不加密
# 商户多租户配置
- urls:
- /api/merchant/data/**
type: merchant
encrypt-type: DES3
merchant-secret:
"M001": "merchant001_key_24_bytes_abc" # 商户M001专用密钥
"M002": "merchant002_key_24_bytes_def" # 商户M002专用密钥
"M003": "merchant003_key_24_bytes_ghi" # 商户M003专用密钥
高级场景配置
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 高安全级别 - 管理后台数据
- urls:
- /api/admin/user/**
- /api/admin/system/**
encrypt-type: SM4
secret: admin_secure_key1 # 16字节管理密钥
forbid-urls:
- /api/admin/logs/**
- /api/admin/health/**
# 中安全级别 - 业务数据
- urls:
- /api/business/report/**
- /api/business/analytics/**
encrypt-type: DES3
secret: business_data_key_24_bytes # 24字节业务密钥
forbid-urls:
- /api/business/config/**
- /api/business/status/**
# 低安全级别 - 一般数据
- urls:
- /api/common/user-info/**
encrypt-type: DES3
secret: common_response_key_24_byte # 24字节通用密钥
forbid-urls:
- /api/common/public/**
- /api/common/cache/**
不同业务场景配置
金融系统
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 交易数据 - 最高安全级别
- urls:
- /api/transaction/detail/**
- /api/account/balance/**
- /api/transfer/record/**
encrypt-type: SM4
secret: finance_sm4_key_1 # 16字节金融密钥
# 用户资产信息
- urls:
- /api/asset/**
- /api/portfolio/**
encrypt-type: DES3
secret: asset_data_key_24_bytes_fin # 24字节资产密钥
forbid-urls:
- /api/asset/types/** # 资产类型不加密
# 银行接口 - 多机构配置
- urls:
- /api/bank/account/**
type: merchant
encrypt-type: SM4
merchant-secret:
"BANK001": "bank001_secure_key16" # 银行001密钥
"BANK002": "bank002_secure_key16" # 银行002密钥
"BANK003": "bank003_secure_key16" # 银行003密钥
电商平台
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 用户隐私数据
- urls:
- /api/user/profile/**
- /api/user/address/**
- /api/user/payment-method/**
encrypt-type: DES3
secret: user_privacy_key_24_bytes_
# 订单敏感信息
- urls:
- /api/order/detail/**
- /api/order/payment-info/**
encrypt-type: SM4
secret: order_secure_key1
# 商家数据
- urls:
- /api/seller/finance/**
- /api/seller/analytics/**
type: merchant
encrypt-type: DES3
merchant-secret:
"SHOP001": "shop001_data_key_24_bytes_a"
"SHOP002": "shop002_data_key_24_bytes_b"
"SHOP003": "shop003_data_key_24_bytes_c"
forbid-urls:
- /api/seller/products/** # 商品信息不加密
医疗系统
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 患者隐私数据 - 最高安全级别
- urls:
- /api/patient/medical-record/**
- /api/patient/diagnosis/**
- /api/patient/prescription/**
encrypt-type: SM4
secret: medical_sm4_key_1 # 16字节医疗密钥
# 医生操作记录
- urls:
- /api/doctor/operation/**
- /api/doctor/notes/**
encrypt-type: DES3
secret: doctor_record_key_24_bytes
# 医院多机构配置
- urls:
- /api/hospital/patient-data/**
type: merchant
encrypt-type: SM4
merchant-secret:
"HOSP001": "hospital001_key16" # 医院001密钥
"HOSP002": "hospital002_key16" # 医院002密钥
"HOSP003": "hospital003_key16" # 医院003密钥
forbid-urls:
- /api/hospital/departments/** # 科室信息不加密
教育平台
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 学生个人信息
- urls:
- /api/student/profile/**
- /api/student/grade/**
- /api/student/transcript/**
encrypt-type: DES3
secret: student_data_key_24_bytes_
# 考试答案和成绩
- urls:
- /api/exam/result/**
- /api/exam/answer/**
encrypt-type: SM4
secret: exam_result_key1
# 学校多租户配置
- urls:
- /api/school/student-data/**
type: merchant
encrypt-type: DES3
merchant-secret:
"EDU001": "school001_key_24_bytes_edu"
"EDU002": "school002_key_24_bytes_edu"
"EDU003": "school003_key_24_bytes_edu"
forbid-urls:
- /api/school/courses/** # 课程信息不加密
企业办公系统
yaml
gateway:
filter:
response-encrypt:
enabled: true
rules:
# 员工敏感信息
- urls:
- /api/employee/salary/**
- /api/employee/performance/**
- /api/employee/personal/**
encrypt-type: SM4
secret: hr_secure_key_16b
# 财务数据
- urls:
- /api/finance/report/**
- /api/finance/budget/**
encrypt-type: DES3
secret: finance_report_key_24_byte
# 部门数据
- urls:
- /api/department/confidential/**
encrypt-type: DES3
secret: dept_confidential_key_24_b
forbid-urls:
- /api/department/structure/** # 组织架构不加密
商户验证说明
- 当type设置为merchant时,系统会根据请求中的商户ID选择对应的密钥
- 商户ID必须通过请求头传递
X-Merchant-Id
- 如果找不到对应的商户密钥,将使用默认密钥
- 建议为每个商户配置独立的密钥
- 建议结合签名使用
注意事项
商户密钥配置
- 确保每个商户的密钥都是唯一的
- 定期更新商户密钥
- 妥善保管密钥信息
- 避免在日志中打印密钥
安全建议
- 使用HTTPS传输
- 实现密钥定期轮换机制
- 记录密钥使用日志
- 设置密钥有效期
响应示例 📝
加密前的响应数据
json
{
"code": 0,
"msg": "success",
"data": {
"userId": "12345",
"username": "admin",
"token": "eyJhbGciOiJIUzI1NiJ9..."
}
}
加密后的响应数据
json
{
"code": 0,
"msg": "success",
"data": "U2FsdGVkX1+2tOLqT8HqVJ6Y+6P8v+3/RjMYn+5p+8Q=",
"encrypt": true
}
最佳实践 💡
密钥管理
- 使用高强度的密钥(建议24位以上)
- 不同环境使用不同的密钥
- 定期更换密钥
- 安全存储密钥,避免泄露
加密策略
- 只对敏感数据接口启用加密
- 合理使用排除规则
- 避免对大数据量响应启用加密
- 配合请求加密使用,实现双向加密
性能优化
- 设置合理的缓存策略
- 避免重复加密
- 监控加密性能影响
常见问题 ❓
加密失败
- 检查密钥格式是否正确
- 验证数据格式是否符合要求
- 确认加密算法配置是否正确
客户端解密问题
- 确保使用相同的密钥
- 验证加密算法实现是否一致
- 检查是否正确处理
encrypt
标志
性能问题
- 评估加密对响应时间的影响
- 优化加密范围
- 考虑使用缓存机制
安全提示 ⚠️
CAUTION
- 密钥是系统安全的核心,必须严格保护
- 建议使用HTTPS传输加密数据
- 定期更新密钥,降低泄露风险
- 避免在日志中打印加密密钥和原始数据
- 建议配合请求加密和签名验证使用