百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

在 Apifox 中采用 CryptoJS 进行高级 AES 参数加密

lipiwang 2024-11-04 14:34 47 浏览 0 评论

假如现在要在 Apifox 中发送一个「登录」的请求,然后我需要将接口中的 password 参数使用 AES 加密算法加密以后,再传给后台服务,这要怎么做?

要在 Apifox 中使用 AES 加密算法对 password 参数进行加密,你需要在「前置操作」中编写 JavaScript 代码,并使用 CryptoJS 库来实现 AES 加密,具体操作见下文。在开始之前,我们先了解一下什么是 AES 加密算法。

什么是 AES 加密算法?

AES(Advanced Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密。在使用 AES 算法进行加密时,通常需要以下参数:

  • 密钥 (Key) :AES 算法使用的密钥长度可以是 128 位、192 位或 256 位(16/24/32字节)。密钥长度不同,安全性也不同。
  • 初始向量 (Initialization Vector,IV) :初始向量是一个随机生成的固定长度的参数,用于增加加密的安全性,尤其是在对同一段明文进行多次加密时。IV 的长度通常为 128 位(16字节)。
  • 加密模式 (Mode of Operation) :AES 算法支持多种加密模式,例如 ECB、CBC、CTR、OFB、CFB 等。每种模式有不同的特点和适用场景,选择合适的加密模式对于实际应用至关重要。
  • 填充方式 (Padding) :在对明文进行加密时,如果明文的长度不是分组长度的整数倍,就需要对其进行填充。常用的填充方式有 PKCS#5、PKCS#7 填充、Zero 填充等。
  • 字符编码 (Character Encoding) :在对明文进行加密前,通常需要将其转换为字节流。这时需要指定字符编码,如 UTF-8、ASCII 等。
  • 密钥衍生 (Key Derivation) :有时候会使用密钥衍生函数(Key Derivation Function,KDF)从密码中派生出实际用于加密的密钥。

这些参数的选择和配置需要根据具体的应用场景和安全需求来确定。特别注意,加密和解密过程需要相同的密钥和初始向量才能正确执行。

实现步骤

首先在 Apifox 中打开你的「登录」接口,然后转到【修改文档->前置操作】标签页,新建一个自定义脚本,你就可以在这里编写你的加密脚本。需要注意的是,自定义脚本需要在「变量替换&继承父级」之前,见下图:

接下来,我们就可以使用 AES 加密算法来给接口的请求参数加密了。

步骤 1

引入 CryptoJS 库

CryptoJS 是一个流行的 JavaScript 库,用于提供加密算法的实现,例如 AES、DES、TripleDES、Rabbit、RC4、MD5、SHA-1、SHA-256 等。使用 CryptoJS,你可以在客户端或服务器端轻松地实现加密功能,以保护数据的安全性。

Apifox 中内置了 CryptoJS 库,所以你可以直接使用,引入方式为:

var CryptoJS = require("crypto-js");

步骤 2

编写 AES 加密脚本

假设你的密码字段名是 password,你可以先将其存到环境变量中并给定值(比如:123456),或者等下直接在脚本中赋值。

下面是一个使用 CryptoJS 进行 AES 加密的示例脚本,该脚本将加密后的密码存储到环境变量中,以便在后续的请求中使用。

// 导入 crypto-js 模块var CryptoJS = require("crypto-js");
// 密码获取方式根据实际情况调整// 假设这是我们要加密的`password`字段的值,从环境变量中获取const password = pm.environment.get("password"); // 或其他方式获取,比如直接赋值
// 使用安全方式确定的密钥和IV(这里为了示例简化说明,实际应用中需要保护好这些敏感信息)const key = CryptoJS.enc.Utf8.parse('mySecretKey12345'); // 确保是16/24/32字节const iv = CryptoJS.enc.Utf8.parse('myIVmyIVmyIVmyIV'); // 确保是16字节
// AES加密const encrypted = CryptoJS.AES.encrypt(password, key, {    iv: iv,    mode: CryptoJS.mode.CBC,    padding: CryptoJS.pad.Pkcs7}).toString();
// 把加密后的密码设置为一个新的变量,可以在请求体内使用pm.environment.set("encryptedPassword", encrypted);

脚本具体解释如下:

  1. 导入 crypto-js 模块。
  2. 使用环境变量或其他方式获取要加密的密码(在这里假设密码从环境变量中获取)。
  3. 定义了一个密钥 key 和一个初始化向量 iv。密钥和初始化向量是用来加密和解密数据时的重要参数,在实际应用中,应该保护好这些敏感信息。
  4. 使用 crypto-js 中的 AES 加密函数 CryptoJs.AES.encrypt() 对密码进行加密。其中,传入的参数包括原始密码 (password) 、密钥 (key) 、初始化向量 (iv) 以及加密模式 (mode) 和填充方式 (padding) 。在 CryptoJS 中,使用 CryptoJs.pad.Pkcs7 来指定使用 PKCS#7 填充方式。
  5. 将加密后的密码存储到一个新的环境变量中,以便在后续的请求中使用。

在「前置操作」中编写的加密脚本会在发起请求之前自动执行,下面就来发起一个请求,看看这个 password 字段是否被加密并发送到后台服务了。

步骤 3

在请求体中使用加密后的密码

在请求体(假设你的请求体是 JSON 格式)中,使用加密后的密码代替原始密码:

{  "username": "zhangsan",  "password": "{{encryptedPassword}}"}

这里的 {{encryptedPassword}} 是 Apifox 的变量语法,它会被替换为「前置操作」中设置的环境变量 encryptedPassword 的值,也就是通过 AES 加密算法加密后的值。

步骤 4

发送请求

点击「发送」按钮,查看返回响应。我这里为了测试数据,所以让后台把接口传过来的参数解密后返回了,可以看到后台解密后的 password 字段值与上面 “步骤 2” 的环境变量中定义的值一样。

来到「实际请求」那里查看,可以看到接口发送的 password 字段是加密传参的,说明 AES 加密脚本生效。

附录

下面的代码是用 FastAPI 写的一段简单的 AES 解密脚本,有兴趣可以建个 .py 文件运行一下,对应的 http://127.0.0.1:8000/decrypt 就是上文例子的请求接口。运行前记得安装相关的模块,如 pip install pycryptodome 等,也可以根据控制台的报错来安装,缺什么就装什么。

from fastapi import FastAPI

from pydantic import BaseModel

from Crypto.Cipher import AES

import base64

import uvicorn

  


app = FastAPI()

  


# 解密函数

defdecrypt_password(password: str, key: bytes, iv: bytes) -> str:

    cipher = AES.new(key, AES.MODE_CBC, iv)

    decrypted_bytes = cipher.decrypt(base64.b64decode(password))

    # 去除填充

    unpadded_password = decrypted_bytes[:-decrypted_bytes[-1]].decode("utf-8")

  return unpadded_password

  


class DecryptionRequest(BaseModel):

    username: str

    password: str

  


@app.post("/decrypt")

async def decrypt_password_endpoint(request: DecryptionRequest):

# 在这里设定你的密钥和初始向量

    key = b'mySecretKey12345'

    iv = b'myIVmyIVmyIVmyIV'

    password = request.password

    decrypted_password = decrypt_password(password, key, iv)

return {"username": request.username, "password": decrypted_password}

  


if __name__ == "__main__":

    uvicorn.run(app, host="127.0.0.1", port=8000)

在 Apifox 中使用 AES 加密算法对密码参数进行加密的基本步骤如下:

  1. 在前置操作中编写 JavaScript 代码,使用 CryptoJS 库实现 AES 加密。
  2. 引入 CryptoJS 库并编写 AES 加密脚本,定义密钥和初始化向量,并对密码进行加密。
  3. 将加密后的密码存储到环境变量中,以便在后续请求中使用。
  4. 在请求体中使用加密后的密码。
  5. 发送请求并查看响应,确认密码字段已加密传参。

相关推荐

一个简单便捷搭建个人知识库的开源项目(MDwiki)

这里我通过自动翻译软件,搬运总结MDwiki官网的部署和使用方法。第一步:下载编译好的后MDwiki文件,只有一个HTML文件“mdwiki.html”。第二步:在mdwiki.html同级目录创建“...

强大、简洁、快速、持续更新 PandaWiki新一代 AI 驱动的开源知识库

PandaWiki是什么PandaWiki是一款AI大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供AI创作、AI问答...

DeepWiki-Open: 开源版Deepwiki,可自己构建github文档库

Deepwiki是Devin团队开发的github文档库,用户能免费使用,但代码不是开源,而DeepWiki-Open侧是开源版本的实现。DeepWiki-Open旨在为GitHub和GitLa...

最近爆火的wiki知识管理开源项目PandaWiki

项目介绍PandaWiki是一款AI大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供AI创作、AI问答、AI搜索等...

轻量级开源wiki系统介绍(轻量开源论坛系统)

wiki系统有很多DokuWiki、MediaWiki、MinDoc等等都是开源的wiki系统。商业版的wiki,像很多企业在用的confluence等。今天我们讲的是一款轻量级且开源的文档管理系统:...

DNS解析错误要怎么处理(dns解析状态异常怎么办)

在互联网时代,网络已经成为人们生活和工作中不可或缺的一部分。然而,当遇到DNS解析错误时,原本畅通无阻的网络访问会突然陷入困境,让人感到十分困扰。DNS,即域名系统,它如同互联网的电话簿,将人们易于...

网页加载慢?这些方法让你秒开网页!

打开浏览器,信心满满地准备查资料、看视频或者追剧,却发现网页怎么都打不开!是不是瞬间感觉手足无措?别慌,这个问题其实挺常见,而且解决起来并没有你想象的那么复杂。今天就来聊聊网页打不开究竟是怎么回事,以...

windows11 常用CMD命令大全(windows11msdn)

Windows11中的命令提示符(CMD)是一个强大的工具,可以通过命令行执行各种系统操作和管理任务。以下是一些常用的CMD命令,按功能分类整理,供你参考:一、系统信息与状态systeminfo显...

电脑提示DNS服务器未响应怎么解决?

我们在使用电脑的时候经常会遇到各种各样的网络问题,例如最近就有Win11电脑用户在使用的时候遇到了DNS未响应的问题,遇到这种情况我们应该怎么解决呢?  方法一:刷新DNS缓存  1、打开运行(W...

宽带拨号错误 651 全解析:故障定位与修复方案

在使用PPPoE拨号连接互联网时,错误651提示「调制解调器或其他连接设备报告错误」,通常表明从用户终端到运营商机房的链路中存在异常。以下从硬件、系统、网络三层维度展开排查:一、故障成因分类图...

如何正确清除 DNS 缓存吗?(解决你访问延时 )

DNS缓存是一个临时数据库,用于存储有关以前的DNS查找的信息。换句话说,每当你访问网站时,你的操作系统和网络浏览器都会保留该域和相应IP地址的记录。这消除了对远程DNS服务器重复查询的...

网络配置命令:ipconfig和ifconfig,两者有啥区别?

在计算机网络的世界里,网络接口就像是连接你电脑和外部网络的桥梁,而网络配置则是确保这座桥梁稳固、通信顺畅的关键。提到网络配置工具,ipconfig和ifconfig绝对是两个绕不开的名字。它们一...

救急的命令 你会几个?(救急一下)

很多人都说小编是注册表狂魔,其实不完全是,小编常用的命令行才是重点。其实所谓的命令行都是当初DOS时代的标准操作方式,随着Windows不断演化,DOS的命令早已成为Windows的一部分了——开始菜...

电脑有网却访问不了GitHub原来是这样

当满心欢喜打开电脑,准备在GitHub这个“开源宝藏库”里挖掘点超酷的项目,却遭遇了网页无法访问的尴尬。看着屏幕上那令人无奈的提示,原本高涨的热情瞬间被泼了一盆冷水,是不是感觉世界都不美好了...

rockstargames更新慢| r星更新速度 怎么办 解决办法

rockstargames更新慢|r星更新速度怎么办解决办法说到RockstarGames,那可是游戏界的大佬,作品个顶个的经典。但话说回来,每当新内容更新时,那蜗牛般的下载速度,真是让人急得...

取消回复欢迎 发表评论: