请求头鉴权、请求参数加密、返回值解密

(1)进行接口测试的时候,写好接口测试用例,然后模拟请求的时候,会出现请求头鉴权。给你了key值那么可以

import hashlibimport timeimport base64

def get_sha1(str_data):    sha1_str = hashlib.sha1(str(str_data)).hexdigest()    print sha1_str    return sha1_str

def get_md5(imsi):    imsi_md5 = hashlib.md5()    imsi_md5.update(str(imsi))    imsi_md5_str = imsi_md5.hexdigest()    print imsi_md5_str    return imsi_md5_str
def authenticate(owner_id="", api_id="", api_key=""):    time.sleep(1)    header = {}    time_stamp = str(int(time.time()))    sign_str = str(api_id) + str(api_key) + time_stamp    sign = hashlib.sha1(sign_str.encode("utf8")).hexdigest()    token_str = ",".join([str(owner_id), str(api_id), time_stamp, sign])    token = base64.b64encode(token_str.encode("ascii")).decode("utf-8")    header["Authorization"] = "Bearer {0}".format(token)    return header

以上说明的是 对某个值 进行sha 加密 和获取md5值  下面这个函数 是请求头 鉴权获取token的

(2)请求参数加密:

首先来写 加密方法和解密方法:
from Crypto.Cipher import AESfrom Crypto import Randomimport urllib

class AESCipher:    def __init__(self, key):        self.key = key.decode("base64")        print key

    def encrypt(self, raw):        """        Returns hex encoded encrypted value!        """        BS = 16        pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)  # 对要加密的内容按16位进行补位

        iv = Random.new().read(AES.block_size)        cipher = AES.new(self.key, AES.MODE_ECB, iv)        raw = pad(raw)        return str(cipher.encrypt(raw)).encode("base64").strip()

    def decrypt(self, enc):        """        Requires hex encoded param to decrypt        """        enc = urllib.unquote(enc).decode(‘utf-8‘)  # 特殊字符(+ = ..)转换一下        enc = enc.decode("base64")        iv = enc[:16]        cipher = AES.new(self.key, AES.MODE_ECB, iv)        dec_str = cipher.decrypt(enc).strip(‘\x10‘)        return dec_str

加解密函数封装完成 那么实际当中进行调用就行:肯定有加密的key值key=""
asc = aes_cipher.AESCipher(key=key)
enc_str = asc.encrypt(json.dumps(data))  请求的时候 data=base64.b64decode(enc_str)要进行base64一下

这样就对请求参数进行加密了 按照给的key值

那么结果解密 也是一样
for_bs = ret.encode(‘base64‘)aes = aes_cipher.AESCipher(decry_key)dec = aes.decrypt(for_bs)

好了,分享完毕,大家试试吧!



原文地址:https://www.cnblogs.com/testling/p/11822300.html

时间: 2024-10-05 11:23:38

请求头鉴权、请求参数加密、返回值解密的相关文章

javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta chaset="UTF-8"> 5 <title></title> 6 </head> 7 <body

C++笔记(3):函数的参数和返回值

刚学C++那会,做课程设计的时候总是会去网上很找别人写好的程序来参考,那时候看到函数参数列表里各种复杂的类型和奇怪的写法就头大,后来总算是慢慢搞清楚了,在此对函数各种类型的形参以及函数的返回值进行一下总结. 1.普通形参 传递普通形参也就是值传递,传递的是实际参数的一个副本,当函数被调用时,形参复制实参,也就是说此时形参和实参的值是一样的,但形参在内存中拥有自己的地址.当函数结束时形参的生命周期终止,函数内部的操作不会影响到实参的值.经典的值交换函数代码如下: void swap1(int a,

javascript函数参数、返回值类型检查

实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.define('PERSON', function(p){    return p && p.type === 'person' && p.name;}); 定义函数:var addStr = Str(function(a, b){  return a + b;}, Str, St

C#秘密武器之多线程——参数与返回值

概述 线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一.添加外壳方法 原理:把参数传递变成了对变量的调用 方法:定义一个专门的线程类. 1.需要向线程传递的参数和返回值作为类的公共属性: 2.线程函数的真正方法也放在该类里边 3.加壳的线程函数也放在里边(真正调用的是2的方法) public class MyThread { public dou

C语言 结构体作为参数和返回值使用

方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /********************************************************************** * 版权所有 (C)2017, Wang maochun. * * 文件名称:travel.cpp * 文件标识:无 * 内容摘要:主要演示结构体作为参数以及返回值 * 其它说明:"传值” * 当前版本:V1.0 * 作 者:Wang m

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

Java加载jar文件并调用jar文件当中有参数和返回值的方法

在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成hello.jar文件. 1 package org.lele.fatpanda; 2 3 public class Util 4 { 5 public static String myName; 6 /* 7 * 无参数,无返回值的方法. 8 */ 9 public static void get

java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还能提高程序的执行效率, 今天在JAVA+Mysql上也实现了这个功能下面我贴出代码,这次我会讲详细点,让看的朋友能更加清楚它的好处在哪里. 一.封装的代码存储过过程调用方法   关于返回类CallableStatement的解释: CallableStatement 对象为所有的DBMS 提供了一种

带有参数和返回值的对象方法

# 按要求设计一个计算器类 # 属性: 无. 功能: 1) 返回派的值. 2) 计算一个整数的平方. 3) 计算两个整数的和. // 按要求设计计算器类 // 类的声明 #import <Foundation/Foundation.h> @interface Calculator : NSObject // 没有属性不用写大括号{} - (double) pi; - (int) square:(int)num; // 关于方法名的说明见下面 - (int) sumOfNum1:(int)num