API接口加密,解决自动化中登录问题

一、加密方式

  • AES:对称加密,快
  • RAS:非对称加密,慢
  • AES+RAS:安全+高效

加密过程:字符串=====》字节流====》加密的字节流(算法),解密有可能出现乱码,所以不能直接转成字符串,一般采用base64,base64的结果一定是ASCII范围内的字节,所以一定可以转成字符串

字符串转成字节流:encode

字节流转成字符串:decode

二、接口加密

请求:加密,响应:解密

  1. 加密API请求错误
  • 格式不正确
  • 加密格式不正确
  • 请求参数值不正确

三、第三方库实现加密

  1. 安装pycryptodome:pip3 install pycryptodome

四、加密方式

以下加密信息,测试端和接口端必须一致

  • 加密算法
  • 密钥
  • 加密模式
  • IV变量

五、加密代码

加密算法

python 复制代码
import base64
import json
from Crypto.Cipher import AES
import base64

#AEX加密
key = b"sanmu's aes_key!"   #16位字节作为密钥
mode=AES.MODE_EAX   #EAX加密模式
IV=b"0"*16

class Encoder:
    @staticmethod
    def encrypt(data:dict)->str:
        """
        AES加密
        1.接收字典
        2.字典转字符串
        3.字符串转字节
        4.字节进行加密
        5.对加密结果进行bas64
        6.编码结果转字符串
        :param data:
        :return:
        """
        encoder = AES.new(key, AES.MODE_EAX,nonce=IV)
        content_str=json.dumps(data)
        content_byte=content_str.encode('utf-8')
        content_en = encoder.encrypt_and_digest(content_byte)
        return base64.b64encode(content_en).decode("utf-8")


    @staticmethod
    def decrypt(data:str)->dict:
        """
        AES解密
        1.接收字符串
        2.字符串转字节
        3.base64解码
        4.AES解密
        5.解密结果转字符串
        6.字符串转字典
        :param data:
        :return:
       """
        encoder = AES.new(key, AES.MODE_EAX,nonce=IV)
        content_byte=base64.b64decode(data)
        content_de=encoder.decrypt(content_byte)
        content_str=content_de.decode("utf-8")
        content=json.loads(content_str)
        return content

test_api.py
import requests
from libs import  Encoder

login_info={
    'username':'sanmu',
    'password':'123456'
}

data={
    "content":Encoder.encrypt(login_info),  #内容是AES加密的,是字符串
    "cipher":"AES"
}

print(data)
'''
url='https://api.tttt.one/rest-v1/encrypt/with_json'
resp=requests.post(url,json=data)
print(resp.json())

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
五网2 小时前
软件测试用例模板怎么写:从用例设计到执行记录的全套指南
软件测试·论文阅读·全文检索·测试用例·论文笔记·用例设计·用例模板
一个天蝎座 白勺 程序猿6 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
分布式存储与RustFS10 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希12311 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾12 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
讯捷蓝达17 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落20 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisw0520 小时前
基于神经网络的机器人导航系统的设计与执行!
神经网络·机器人·自动化
lisanmengmeng20 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
严肃小白兔20 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化