接口测试遇到加密参数如何测试?
创始人
2025-12-24 18:13:02
0

常见的接口参数加密包含对称加密包含AES安全性高,性能好,广泛用于敏感数据加密,DES/3DES(已逐步被淘汰,安全性较低);非对称加密包含RSA广泛用于数字签名和密钥交换,ECC(椭圆曲线加密)安全性更高,密钥更短;哈希算法加密包含MD5(已不推荐用于安全场景,易碰撞),SHA-256/SHA-3安全性更高,广泛用于数据完整性校验;还有数字签名加密RSA-SHA256生成签名,HMAC基于密钥的哈希消息认证。

根据不同的实际应用场景,比如API接口中的参数加密对称加密速度快适合大量数据,非对称加密适合密钥交换,哈希用于验证数据完整性,数字签名用于身份认证等。

在我们进行自动化测试或者手动测试时,发现接口参数被加密了,不知道怎么构造请求或者验证响应。这时候,作为测试从业者就需要知道如何获取加密方式,生成正确的参数,以及如何处理加密后的响应数据。

一、明确加密逻辑

沟通开发:

获取加密算法(如AES、RSA、HMAC等)、密钥、加密模式(如CBC/ECB)和填充方式(如PKCS7)。

确认参数加密范围(仅值?整个JSON?URL参数?)。

是否需要动态参数(时间戳、随机数Nonce)参与加密或签名。

文档或代码:

查看接口文档中的加密规则(如签名生成方式)。

直接参考开发提供的加密工具类或示例代码。

二、使用工具生成加密参数

(1) 代码生成

Python示例

# AES加密from Crypto.Cipher import AESimport def aes_encrypt(data: str, key: str, iv: str) -> str: cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode()) pad_data = data + (AES.block_size - len(data) % AES.block_size) * chr(AES.block_size - len(data) % AES.block_size) encrypted = cipher.encrypt(pad_data.encode()) return .b64encode(encrypted).decode()# HMAC-SHA256签名import hmacimport hashlibdef hmac_sign(data: str, secret: str) -> str: return hmac.new(secret.encode(), data.encode(), hashlib.sha256).hexdigest()

(2) 工具辅助

Postman:

在Pre-request Script中编写加密逻辑(支持CryptoJS)。

// Postman AES加密示例const CryptoJS = require('crypto-js');const data = 'raw_data';const key = CryptoJS.enc.Utf8.parse('密钥');const iv = CryptoJS.enc.Utf8.parse('IV');const encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC });pm.environment.set('encrypted_data', encrypted.toString());

三、测试环境简化处理

Mock解密服务:

让开发提供测试环境的解密接口,直接传入加密参数获取明文。

# 调用解密接口示例(伪代码)response = requests.post("http://test-env/decrypt", data={"encrypted": encrypted_data})decrypted_data = response.json()["data"]

固定测试密钥:

测试环境使用预置密钥(如test_key_123),避免频繁更换。

关闭加密开关:

测试环境通过配置临时关闭加密(仅限内部测试)。

四、处理动态参数

时间戳:

固定时间戳(如1620000000),或使用开发提供的免校验模式。

随机数(Nonce):

使用UUID或固定值(如test_nonce),或调用开发提供的Nonce生成接口。

签名防重放:

若接口校验签名时效性,需在测试脚本中动态生成时间戳和签名。

五、自动化测试集成

封装加密函数:

将加密/签名方法封装为公共模块,供所有测试用例调用。

密钥管理:

使用环境变量或密钥管理服务(如Vault)存储密钥,避免硬编码。

# 从环境变量获取密钥import oskey = os.getenv('API_SECRET_KEY')

参数化测试数据:

测试用例中维护明文数据,运行时动态加密。

# 测试数据文件(data.yaml)cases: - name: 用户登录 plain_data: {"user": "test", "pwd": "123456"} encrypted_field: "data" # 需要加密的字段名

六、 解密响应验证

响应内容解密:

若返回数据被加密,需先解密再断言。

def test_api_response(): response = call_api() encrypted_data = response.json()['data'] decrypted_data = aes_decrypt(encrypted_data, key, iv) # 解密函数 assert "success" in decrypted_data

签名校验:

验证服务端返回的签名是否合法(防止伪造响应)。

def verify_sign(response_data, server_sign): local_sign = hmac_sign(response_data, secret_key) assert local_sign == server_sign

常见问题排查

测试加密接口的核心步骤

理清规则明确加密算法、密钥、动态参数逻辑。

工具化将加密/签名封装为可复用的函数或工具。

解耦数据测试用例维护明文,运行时动态加密。

灵活Mock利用测试环境特性简化加密流程。

安全协作密钥通过安全渠道传递,避免泄露。

相关内容

图纸加密软件有哪些?202...
图纸一泄密,半年都白干! 老板们是不是都经历过这种“人祸”?是不是...
2026-03-02 19:45:06
2026热门图纸加密软件:...
图纸属于企业核心设计成果,其数据安全直接关系到技术资产保护与商业竞...
2026-03-02 18:44:57
北京深盾科技股份有限公司:...
软件安全防护领域的核心工具:解析北京深盾科技股份有限公司的java...
2026-03-02 17:48:15
【加密货币光环褪去,散户纷...
【加密货币光环褪去,散户纷纷转向股票市场】受去年10月加密市场崩盘...
2026-03-02 17:19:20
加密货币概念股全线下跌,截...
加密货币概念股全线下跌,截至发稿,星太链集团(00399.HK)跌...
2026-03-02 15:25:23
亚太股市、美股期货齐跌,黄...
美伊冲突影响持续至周一(2日)亚太交易时段。亚太股市整体下跌1.3...
2026-03-02 14:25:19

热门资讯

虚拟币交易所注册,真的有那么简... >>点击获取下载地址<< 虚拟币交易热潮下的诱惑与风险 虚拟币交易所,这个曾经只有技术极客和金融冒...
资源类板块表现强势,关注红利E... 3月2日,市场震荡分化,油气、煤炭等资源类板块逆势走强,带动红利指数上涨。截至收盘,中证红利指数上涨...
图纸加密软件有哪些?2026年... 图纸一泄密,半年都白干! 老板们是不是都经历过这种“人祸”?是不是损失老大了?是不是感觉签的保密协议...
“红利+”指数逆势涨超1%,关... 截至收盘,国证自由现金流指数上涨1.9%,国证价值100指数上涨1.6%,中证红利指数上涨1.4%,...
知名基金经理刘小明或已离职 信... 深圳商报·读创客户端记者 詹钰叶 信达澳亚基金知名基金经理刘小明日前突然清仓式卸任旗下产品,有传言称...
云南白药(000538)披露认... 截至2026年3月2日收盘,云南白药(000538)报收于56.01元,较前一交易日下跌0.07%,...
2026热门图纸加密软件:这8... 图纸属于企业核心设计成果,其数据安全直接关系到技术资产保护与商业竞争力。加密软件通过权限控制与访问管...
智昇集团控股(08370.HK... 智昇集团控股(08370.HK)发布公告,应债券持有人转换本公司于2025年6月30日所发行本金额为...
伊朗称打击以总理办公室和以空军... 据央视新闻消息,当地时间3月2日,伊朗伊斯兰革命卫队公共关系部发布声明称,伊朗使用“海巴尔”导弹,对...
国投白银LOF:3月3日开市起... 钛媒体App 3月2日消息,国投白银LOF(161226)公告,本基金将于2026年3月3日开市起至...