zoukankan      html  css  js  c++  java
  • python 调用java脚本的加密(没试过,先记录在此)

    http://lemfix.com/topics/344

    前言

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

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

    而目前为主,大部分公司的产品都是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代码如下(看每一行代码的注释哦):

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



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

     



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

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

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

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

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

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

     

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

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

    执行结果如下:

     



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

  • 相关阅读:
    va_list va_start va_end va_arg 解决变参问题
    标准输出文件
    Qt QDataTime QString 两个类的使用
    联合开发网站
    iOS LLDB调试器和断点调试
    Wireshark 网络抓包工具Wireshark的使用
    linux 操作系统下c语言编程入门
    iOS 应用崩溃日志分析
    iOS sqlite3数据库解析
    iOS 解析手势识别(Gesture Recognizers)
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/11768977.html
Copyright © 2011-2022 走看看