接口自动化测试基础03-Jsonpath接口关联和加密

 一、Jsonpath

Jsonpath在线解析JSONPath解析器 - 一个工具箱 - 好用的在线工具都在这里! (atoolbox.net)

import jsonpath
# 注意:
# 1. jsonpath处理的数据必须是字典格式
# 2. 报文的格式是json,必须进行数据的转换。
# 3. json.loads() 将json转换成字典类型
res = jsonpath.jsonpath(data,"$.name")
print(res)

 二、加密

2.1 不可逆算法(MD5)

MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据转换为固 定长度的哈希值,通常为128位(16字节)。

MD5算法的主要特点是:

1. 不可逆性:无法从哈希值还原出原始数据。无论原始数据大小是多少,其生成的哈希值的长度都是 固定的。

2. 唯一性:不同的输入数据通常会生成不同的哈希值。即使原始数据只有微小的变化,其生成的哈希 值也会有较大的差异。

3. 快速计算:MD5算法的计算速度很快,对于大多数输入数据,可以在短时间内生成哈希值。

import hashlib

def md5_encrypt(text):
    "MD5加密-- 不可逆"

    # 3步走
    # 1. 创建对象
    md5 = hashlib.md5()
    # 2. 把对应数据去进行更新,对应的编码格式
    md5.update(text.encode("utf-8"))
    # 3. 生成对应的数据(哈希值)
    text = md5.hexdigest()
    # 4. 返回数据
    return text

MD5加密 (lddgo.net)

2.2 对称加密AES

在对称加密算法中,加密和解密使用的是同一把钥匙,即:使用相同的密匙对同一密码进行加密和解密。

加密过程如下:

        加密:原文 + 密匙 = 密文

        解密:密文 - 密匙 = 原文

# coding = utf-8
# Author: Hami
# Date: 2023/6/15 3:28
"""
对称加密:加密和解密使用的是同一把钥匙,即:使用相同的密匙对同一密码进行加密和解密。
常用的加密方法:DES、3DES、AES...(AES算法是目前最常用的对称加密算法)
"""
import base64
from Crypto.Cipher import AES
class EncryptDate:

    def __init__(self, key):
        self.key = key.encode("utf-8") # 初始化密钥
        self.length = AES.block_size # 初始化数据块大小
        self.aes = AES.new(self.key, AES.MODE_ECB) # 初始化AES,ECB模式的实例
        # 截断函数,去除填充的字符
        self.unpad = lambda date: date[0:-ord(date[-1])]

    def pad(self, text):
        """
        #填充函数,使被加密数据的字节码长度是block_size的整数倍
        """
        count = len(text.encode('utf-8'))
        add = self.length - (count % self.length)
        entext = text + (chr(add) * add)
        return entext
   
    def encrypt(self, encrData): # 加密函数
        res = self.aes.encrypt(self.pad(encrData).encode("utf8"))
        msg = str(base64.b64encode(res), encoding="utf8")
        return msg

    def decrypt(self, decrData): # 解密函数
        res = base64.decodebytes(decrData.encode("utf8"))
        msg = self.aes.decrypt(res).decode("utf8")
        return self.unpad(msg)

if __name__ == '__main__':
    # 加密
    key = "1234567812345678" # key 密码
    data = "tony" # 数据
    eg = EncryptDate(key) # 这里密钥的长度必须是16的倍数
    res = eg.encrypt(str(data))
    print(f"加密后的数据为:{res}")

    # 解密
    key = "1234567812345678" # key 密码
    data = "XbXHJrNLwoTVcyfqM9eTgQ==" # 数据
    eg = EncryptDate(key) # 这里密钥的长度必须是16的倍数
    res = eg.decrypt(str(data))
    print(f"解密后的数据为:{res}")

使用在线工具进行AES对称加密:AES加密解密 (lddgo.net)

2.3 非对称加密RSA

1. 非对称加密分为公钥和私钥

2. 公钥一般用来数据的加密

3. 私钥一般用来数据的解密

class Rsa():
    def __init__(self):
        # 加载公钥
        self.pub_key = RSA.importKey(pub_str1)
        # 加载私钥
        self.pri_Key = RSA.importKey(priv_str1)

    # rsa加密,返回加密结果
    def encrypt(self, text):
        cipher = PKCS1_cipher.new(self.pub_key)
        # 加密并转为b64编码
        rsa_text = base64.b64encode(cipher.encrypt(text.encode("utf-8)")))
        # 解码为字符串
        text = rsa_text.decode("utf8")
        return text

    # rsa解密 返回解密结果
    def decrypt(self, text):
        cryto_info = PKCS1_cipher.new(self.pri_Key)
        # 解密,并将b64编码解码
        rsa_text = cryto_info.decrypt(base64.b64decode(text.encode("utf8")), 0)
        # 解码为字符串
        res = rsa_text.decode("utf8")
        return res

if __name__ == "__main__":
    rsaer = Rsa()
    info = rsaer.encrypt('哈米')
    print('加密:', info)
    print('解密:', rsaer.decrypt(info))

生成RSA公钥私钥:https://www.lddgo.net/encrypt/rsakey

使用在线工具进行RSA加密/解密:https://www.lddgo.net/encrypt/rsa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值