[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使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软