// 导入加密工具包(类似工具箱,里面有加密解密的方法) import cn.zybank.GmEncry; // 记录解密开始时间(获取当前系统时间的毫秒数) long UserQry_00_12_001_decrypt_starttime = System.currentTimeMillis(); // 从全局变量池获取用户编号(作为解密密钥) String UserQry_00_12_001_UserNo = vars.get("UserNo"); // 获取前一个请求的响应数据(服务器返回的加密内容) String UserQry_00_12_001_responseEncrypt = prev.getResponseDataAsString(); // 使用GmEncry工具进行第一次解密(核心解密操作) // 参数1: 解密密钥(用户编号) // 参数2: 加密的响应数据 String UserQry_00_12_001_responseEncryptData = GmEncry.decrypt( UserQry_00_12_001_UserNo, UserQry_00_12_001_responseEncrypt ); // 进行第二次解密(明文解密,可能是格式转换或最终处理) String UserQry_00_12_001_plaintext = GmEncry.plainTextDecrypt( UserQry_00_12_001_responseEncryptData ); // 检查解密结果中是否包含成功标识("Rspscd":"000000") if (UserQry_00_12_001_plaintext.contains(""Rspscd":"000000"")) { // 如果包含成功标识,设置失败标志为false(表示成功) Failure = false; } else { // 如果不包含成功标识,设置失败标志为true(表示失败) Failure = true; // 保存完整的解密文本作为失败信息(方便查看具体错误) FailureMessage = UserQry_00_12_001_plaintext; } // 记录解密结束时间 long UserQry_00_12_001_decrypt_endtime = System.currentTimeMillis(); // 计算解密总耗时(结束时间 - 开始时间) long UserQry_00_12_001_decrypt_delaytime = UserQry_00_12_001_decrypt_endtime - UserQry_00_12_001_decrypt_starttime; // 将耗时数值转为字符串(方便写入文件) String UserQry_00_12_001_decrypt_delay_time = UserQry_00_12_001_decrypt_delaytime.toString(); // 创建文件写入流(追加模式) // 目标文件路径:E:/***/加解密耗时/UserQry_12.txt FileWriter fstream = new FileWriter("E:/***/加解密耗时/UserQry_12.txt", true); // 创建缓冲写入器(提高文件写入效率) BufferedWriter out = new BufferedWriter(fstream); // 写入解密耗时信息(格式为:",解密耗时:xxx") out.write(",解密耗时:" + UserQry_00_12_001_decrypt_delay_time); // 写入换行符(不同操作系统换行符不同,这样写最保险) out.write(System.getProperty("line.separator")); // 关闭缓冲写入器 out.close(); // 关闭文件流 fstream.close();
关键概念详解:
解密过程:
双重解密:decrypt()
+ plainTextDecrypt()
第一次解密:将加密数据转为可读格式(但可能还有特殊编码)
第二次解密:转为完全可读的明文
类似:先拆快递外包装(第一次解密),再拆内部保护层(第二次解密)
结果验证:
if (plaintext.contains(""Rspscd":"000000""))
Rspscd
可能是 “Response Code”(响应码)的缩写
000000
是成功代码(类似HTTP的200 OK)
如果找到这个代码 → 操作成功
如果没找到 → 操作失败,保存错误信息
耗时记录:
记录开始时间和结束时间
计算差值得到实际耗时
写入文件时添加了逗号前缀(,解密耗时:15
),可能是为了与之前的加密耗时组成一行
文件操作特点:
true
参数表示追加模式(不覆盖已有内容)
System.getProperty("line.separator")
智能获取当前系统的换行符:
Windows:
Linux/Mac:
关闭顺序很重要:先关BufferedWriter
,再关FileWriter
执行流程示意图:
图表
代码
下载
是
否
开始
记录开始时间
获取用户密钥
获取加密响应数据
第一次解密
第二次解密
是否包含成功码?
标记成功
标记失败+保存错误
记录结束时间
计算耗时
写入文件
关闭资源
结束
实际应用场景:
假设这是一个银行系统查询操作:
用户发起查询请求(加密)
服务器返回查询结果(加密)
这段代码负责:
解密服务器返回的数据
检查交易是否成功
记录解密耗时(性能监控)
注意事项:
文件路径:E:/***/...
是Windows路径,需确保:
目录存在且有写入权限
磁盘空间充足
解密依赖:
需要正确的用户密钥(UserNo
)
依赖GmEncry
类的正确实现
异常处理:
当前代码没有错误处理(如解密失败、文件写入失败等)
实际使用时可能需要添加try-catch
日志格式:
假设文件已有”加密耗时”记录
此代码追加”解密耗时”到同一行末尾
示例完整行:UserQry_00_12_001加密耗时:15,解密耗时:20
提示:
prev.getResponseDataAsString()
是JMeter特有的方法,表示获取前一个HTTP请求的响应内容。
暂无评论内容