[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

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用