zoukankan      html  css  js  c++  java
  • 接口测试时遇到 java 代码加密请求数据

     

    前言

    自动化测试应用越来越多了,尤其是接口自动化测试。

    在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理。

    而目前为主,大部分公司的产品都是java语言实现的。所以加密处理也是java实现的。

    作为用python做测试的我,要做接口自动化时,如何去对请求数据进行加密呢?

    解决方法

    基于此,首先去找开发了解一下具体的加密过程,甚至可以画一个加密流程图出来。

    一种方法是:用python代码去实现加密流程。

    对测试人员技术能力有所要求,对加密的实现也需要与开发人员密切进行交流。

    另外一种便捷的方法就是:直接用python语言调java的加密方式,得到加密后的数据。

    这种方式的好处:不用管加密的过程。只要知道如何调用、怎么传加密数据,怎么得到加密后的数据就可以。


    使用python语言调用java加密代码 - 方式一

    此处感谢歪歪大佬提供了java版加密代码。本篇文章中,歪歪大佬角色:开发GG

    1、了解需要用到的加密信息

    而我作为测试MM((有一点java基础的)做的第一件事情就是:

    愉快的和开发GG聊起了天,咨询了在Java的加密方式中,调用哪个函数可以实现数据加密

    第二件事情,就是让开发GG给我打了一个jar包。这样我用python代码直接调用jar包里的函数就可以了。

    2、开始编写python代码,调用java包里的加密函数。

    python是胶水语言,可以与很多语言一起使用。

    python3有个第三方库Jpype1(下载地址:https://pypi.org/project/JPype1/)

    将开发提供的jar包放在py工程的目录下面。

    python代码如下(看每一行代码的注释哦):

    复制代码
     1 #!/usr/bin/python3
     2 # -*- coding: utf-8 -*-
     3 # Name: use_jar
     4 # Author: liyuan
     5 # Time: 17:01
     6 
     7 import jpype # 引入库
     8 
     9 import os
    10 jvmpath = jpype.getDefaultJVMPath() # 获取本地默认使用的java JVM路径。
    11 # 获取jar包的位置。将jar包放在python的目录下面。
    12 jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],"jars/")
    13 print(jarpath)
    14 # 启动java环境。-Djava.class.path指定要应用的jar包。
    15 jpype.startJVM(jvmpath,"-ea", "-Djava.class.path=%s" % (jarpath + 
    16 'encryption-0.0.1-SNAPSHOT-jar-with-dependencies.jar'))
    17 # 通过jpype编写java的输出语句,打印hello world!
    18 jpype.java.lang.System.out.println("hello World")
    19 
    20 # 使用jar包中的类。通过包名.类名。包名为:com.lemon.encryption.类名为:RSAManager.
    21 # JDClass代表RSAManager类。
    22 JDClass = jpype.JClass("com.lemon.encryption.RSAManager")
    23 # 类的实例化。开发GG告诉我不需要实例化,直接调用就可以。是静态类。
    24 # jd = JDClass() 
    25 # 调用类下的加密函数:encryptWithBase64,传的参数为:1234
    26 # res用来接收加密函数的返回值。即加密后加密数据。
    27 res = JDClass.encryptWithBase64("1234")
    28 print(res) # 打印加密数据
    29 
    30 # 关闭JVM
    31 jpype.shutdownJVM()
    复制代码


    运行此段代码之后,对数据1234的加密结果 为:



    使用python语言调用java加密代码 - 方式二

    在完成以上操作之后,我又开始和开发GG聊了起来,问了一句,我可以直接给jar包传参吗?不用去调用java的函数,在调用jar包的同时 给它传参,直接得到加密后的数据?

    开发GG说,可以!等我改一下,我重新发一个jar给你。

    于是,5分钟后,开发GG甩了我一个新的jar包,告诉我使用方式。我又愉快的开启了第二种使用模式。

    使用方式是这样的:在命令行当中使用java命令行:java -jar jar包 -d 要加密的数据。命令行输出的就是加密后的数据了。

    我在命令行试了一下,果真如此:


    于是,我转换成了python代码(需要获取命令行执行的结果,所以要用到subprocess模块):

    复制代码
     1 #!/usr/bin/python3
     2 # -*- coding: utf-8 -*-
     3 # Name: use_jar_os
     4 # Author: liyuan
     5 # Time: 17:32
     6 
     7 import os
     8 import subprocess
     9 import chardet
    10 
    11 # 获取jar包路径
    12 jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],
    13 "jars/encryption-0.0.1-SNAPSHOT-jar-with-dependencies-2.jar")
    14 # 终端命令行命令。加密的数据为:hello,java
    15 command = "java -jar {} -d {}".format(jarpath,"hello,java")
    16 # 执行command的,并获取命令执行之后的输出数据。
    17 stdout,stderror = subprocess.Popen(command,stdout=subprocess.PIPE
    18 ,stderr=subprocess.PIPE,shell=True).communicate()
    19 # 编码处理
    20 encoding = chardet.detect(stdout)["encoding"]
    21 result = stdout.decode(encoding)
    22 print(result)
    复制代码

    执行结果如下:

    综上,当我们在用python遇到 java加密的时候。可以使用以上2种方式来利用java加密得到加密后的数据。

    当然,在这个过程中,我也会遇到问题。当有问题时,我会向开发GG咨询,因为从启动JVM之后,都是java了,运行出错了或者整不明白的,我都会向开发GG请教。

    所以,在工作当中有什么问题,自己查资料的基础上,多与相关人员进行沟通,带着具体的问题去沟通和请教。

    最后,希望大家也可以多多有自己解决问题的能力。

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/Simple-Small,谢谢!!******* 
     
  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/meiniu/p/12641914.html
Copyright © 2011-2022 走看看