[Swift]网络请求对参数进行AES加密

2024-08-20 22:38

本文主要是介绍[Swift]网络请求对参数进行AES加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CryptoSwift

https://github.com/krzyzanowskim/CryptoSwift
支持MD5,SHA,AES等各种加密

  pod 'CryptoSwift'

加密

/// 网络请求
/// - Parameters:
///   - target: 路由 遵守APITargetType枚举类型
///   - completed: 请求成功返回数据
///   - failed: 请求失败返回数据
func request(_ target: APITargetType, completed: @escaping CompletedBlock, failed: @escaping FailedBlock) {guard var params = target.params else {return}// tokenvar token  = UserDefaults.standard.value(forKey: TOKEN) as? String ?? ""// 时间戳let time = Int(Date().timeIntervalSince1970).toStringlet sign = ("TCC2021" + time + token).md5()params["token"] = tokenparams["version"] = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? Stringparams["source"] = "ios"params["timestamp"] = timeparams["sign"] = sign// 加密let paramsStr = AESEncryptor.encode(to: (params as Dictionary).toJsonString() ?? "") ?? ""let headers: HTTPHeaders = ["Content-Type":"application/x-www-form-urlencoded"]switch target.method {case .post:POST(target: target , url: url, params: ["params": paramsStr], headers: headers, completed: completed, failed: failed)default:break}
}

解密

/// Post请求
/// - Parameters:
///   - url: 请求链接
///   - params: 参数
///   - headers: header信息
///   - completed: 请求成功返回数据
///   - failed: 请求失败返回数据
fileprivate func POST(target: APITargetType,url: String,params: [String : Any]?,headers: HTTPHeaders,completed: @escaping CompletedBlock,failed: @escaping FailedBlock) {sessionManager?.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: headers).validate().responseJSON { [weak self] (response) inguard let data = response.data, let responseStr = String(data: data, encoding: .utf8) else {DispatchQueue.main.async {print("请求结果:")print(response)failed(.otherError, "服务器出错")}return}// 解密guard let theDecodeStr = AESEncryptor.decode(to: responseStr) else {failed(.otherError, "数据出错")debugPrint(responseStr)return}}                     }

AESEncryptor

import Foundation
import CryptoSwiftstruct AESEncryptor {/// AES-128-CBC 加密/// - Parameter str: 加密字符串public static func encode(to str: String) -> String? {let key = "aNkAfmo00p0J0000"guard let aes = try? AES(key: Array(key.utf8), blockMode: ECB(), padding: .pkcs7) else {return nil}guard let encrypted = try? aes.encrypt(str.bytes) else {return nil}let encryptedBase64 = encrypted.toBase64()return encryptedBase64}/// AES-128-CBC 解密/// - Parameter str: 加密字符串public static func decode(to str: String) -> String? {let key = "aNkAfmo00p0J0000"guard let aes = try? AES(key: Array(key.utf8), blockMode: ECB(), padding: .pkcs7) else {return nil}guard let decrypted = try? str.decryptBase64ToString(cipher: aes) else {return nil}return decrypted}}

这篇关于[Swift]网络请求对参数进行AES加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091379

相关文章

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送