[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

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S