本文主要是介绍[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加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!