文章目录
- 一、接口加解密
-
- [1.1 加解密说明](#1.1 加解密说明)
- [1.2 实现分析](#1.2 实现分析)
- [1.3 实现方式](#1.3 实现方式)
- [1.4 实现加解密测试](#1.4 实现加解密测试)
- 二、接口-案例
-
- [2.1 未加密](#2.1 未加密)
- [2.2 加解密应用示例](#2.2 加解密应用示例)
- 三、加密解密标准
一、接口加解密
1.1 加解密说明

思考?工作中如果要对加解密怎么做?
yacas
1、找开发拷贝加密和解密工具
2、确定工具如何使用(如何加密、如何解密)
3、明确请求示例(请求参数格式及使用)
1.2 实现分析

1.3 实现方式

1.4 实现加解密测试

二、接口-案例
python
一、手机端登录接口
- 名称:登录接口
- url: http://mobile-p2p-test.itheima.net/phone/member/login
- 请求方法: post
- 参数类型:"Content-Type " : "application/x-www-form-urlencoded"
- 请求参数︰
{
"member_name": "13012345678",
"password": "test123"
}
2.1 未加密
python
# 单接口调试不用封装
import requests
url = "http://mobile-p2p-test.itheima.net/phone/member/login"
data = {
"member_name": "13012345678",
"password": "test123"
}
result = requests.post(url=url, data=data)
print(result.json())

2.2 加解密应用示例
步骤:
yacas
1、找开发拷贝加密和解密工具
2、确定工具如何使用(如何加密、如何解密)
3、明确请求示例(请求参数格式及使用)
1、加密工具-开发写的
python
import base64
import hashlib
import json
import re
from Crypto.Cipher import AES
# 加解密工具类
class EncryptUtil:
# 发送请求时,加密密码
SEND_AES_KEY = ";3jm$>/p-ED^cVz_j~.KV&V)k9jn,UAH"
# 发送请求时,签名密钥
SEND_SIGN_KEY = "DY34fdgsWET@#$%wg#@4fgd345sg"
# 接收数据时,解密密钥
RECEIVE_AES_KEY = "54Ms5bkE6UEdyrRviJ0![OR]g+i79x]k"
@staticmethod
def padding_pkcs5(value):
BS = AES.block_size
return str.encode(value + (BS - len(value) % BS) * chr(BS - len(value) % BS))
# 替换空字符
@staticmethod
def replace_blank(str_data):
str_data = re.compile("\t|\r|\n").sub("", str_data)
print("replace_blank str_data=", str_data)
return str_data
@staticmethod
def aes_encrypt(key, data):
"""
AES加密
:param key: 密钥
:param data: 待加密数据
:return: 加密后数据
"""
data = base64.encodebytes(data.encode()).decode()
# 替换特殊字符
data = EncryptUtil.replace_blank(data)
print("data=", data)
# 初始化加密器
aes = AES.new(key.encode(), AES.MODE_ECB)
# 加密
padding_value = EncryptUtil.padding_pkcs5(data)
encrypt_aes = aes.encrypt(padding_value)
# 用base64转成字符串形式
encrypted_text = base64.encodebytes(encrypt_aes).decode()
return encrypted_text
@staticmethod
def aes_decrypt(key, data):
"""
AES解密
:param key: 密钥
:param data: 待解密数据
:return: 解密后数据
"""
# 初始化加密器
aes = AES.new(key.encode(), AES.MODE_ECB)
# 优先逆向解密base64成bytes
base64_decrypted = base64.decodebytes(data.encode())
# 执行解密
decrypted_bytes = base64.decodebytes(aes.decrypt(base64_decrypted))
# 转换为字符串
decrypted_text = str(decrypted_bytes, encoding="utf-8")
# 把Unicode转成中文
result = decrypted_text.encode().decode("unicode_escape")
return result
@staticmethod
def md5value(data):
print("md5value data=", data)
md5 = hashlib.md5()
md5.update(data.encode())
return md5.hexdigest()
@staticmethod
def get_diyou(data):
# 把字典转换为JSON字符串
if isinstance(data, dict):
data = json.dumps(data)
aes_encrypt_data = EncryptUtil.aes_encrypt(EncryptUtil.SEND_AES_KEY, data)
return EncryptUtil.replace_blank(aes_encrypt_data)
@staticmethod
def get_xmdy(data):
return EncryptUtil.md5value(
EncryptUtil.SEND_SIGN_KEY + EncryptUtil.replace_blank(data) + EncryptUtil.SEND_SIGN_KEY)
@staticmethod
def decrypt_data(data):
return EncryptUtil.aes_decrypt(EncryptUtil.RECEIVE_AES_KEY, data)
def encryted_Request(url,req_data):
# 对数据进行加密
diyou = EncryptUtil.get_diyou(req_data)
xmdy = EncryptUtil.get_xmdy(diyou)
# 发送请求
req_param = {"diyou": diyou, "xmdy": xmdy}
response = requests.post(url, data=req_param)
# 接收响应并解密
diyou_data = response.json().get("diyou")
data = EncryptUtil.decrypt_data(diyou_data)
result = json.loads(data)
# 返回解密后结果
return result
if __name__ == '__main__':
# 加密
send_data = {}
content = json.dumps(send_data)
diyou = EncryptUtil.get_diyou(content)
print("diyou=", diyou)
xmdy = EncryptUtil.get_xmdy(diyou)
print("xmdy=", xmdy)
2、确定工具如何使用

3、明确请求示例

4、加解密应用示例
python
import requests
from EncryptUtil import EncryptUtil
url = "http://mobile-p2p-test.itheima.net/phone/member/login"
data = {
"member_name": "13012345678",
"password": "test123"
}
# 1、对请求参数form进行加密
diyou = EncryptUtil.get_diyou(data)
# 2、对加密后的数据进行签名
xmdy = EncryptUtil.get_xmdy(diyou)
# 3、调用指定格式请求参数
result = requests.post(url=url, data={"diyou": diyou, "xmdy": xmdy})
# 4、解密
diyou = result.json().get("diyou")
result = EncryptUtil.decrypt_data(diyou)
print("响应结果为:", result)

三、加密解密标准
- 说明:加密标准常用美国联邦政府高级密码标准(AES)
- 安装:
shell
pip install pycryptodome==3.9.6 -i https://pypi.douban.com/simple
- 提示:拿到工具如果报错提示缺少库,需要跟开发确定安装的依赖库。
