当前位置: 首页 > news >正文

用来做视频连接的网站服务器ip域名解析

用来做视频连接的网站,服务器ip域名解析,wordpress无法拖动小工具,用360云盘做网站在现代应用开发中,确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输,并与服务器端保持加密解密的一致性。本文不会包含服务器端代码,但会解释其实现原理。 加密与解密的基本原理 AES(Advance…

在现代应用开发中,确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输,并与服务器端保持加密解密的一致性。本文不会包含服务器端代码,但会解释其实现原理。

加密与解密的基本原理

AES(Advanced Encryption Standard)是一种对称加密算法,即加密和解密使用相同的密钥。为了增强安全性,AES通常与CBC(Cipher Block Chaining)模式和随机生成的初始化向量(IV)一起使用。

为什么IV明文传输不会影响安全性?
  1. 防止重复模式:IV确保相同的明文在每次加密时产生不同的密文,从而防止攻击者通过观察加密输出模式来推断输入模式。
  2. 随机性和唯一性:IV的唯一要求是随机性和唯一性,而不需要保密。因此,IV可以以明文形式与加密数据一起传输。
  3. 加密标准:大多数现代加密标准和协议(如AES-CBC、AES-GCM)都规定IV可以以明文形式传输。

客户端实现方案

在iOS客户端中,我们将使用以下步骤来实现AES加密数据传输:

  1. 生成和存储加密密钥:在用户登录成功后,从服务器获取并存储加密密钥。
  2. 加密请求数据:在每次发送请求时,使用AES和随机生成的IV对请求数据进行加密,并将IV与加密数据一起传输。
  3. 解密响应数据:在接收到服务器响应后,使用AES和IV对响应数据进行解密。

以下是实现这些步骤的详细代码。

AES加密解密类

import CommonCryptoclass AES {// 加密方法static func encrypt(data: Data, key: String) -> (Data, Data)? {return crypt(data: data, key: key, operation: CCOperation(kCCEncrypt))}// 解密方法static func decrypt(data: Data, key: String, iv: Data) -> Data? {return crypt(data: data, key: key, iv: iv, operation: CCOperation(kCCDecrypt)).map { $0.0 }}/**通用加密解密方法- Parameters:- data: 需要加密或解密的数据- key: 用于加密或解密的密钥- iv: 初始化向量。如果为空,则在加密时生成一个新的IV。在解密时需要传入之前生成的IV。- operation: 加密或解密操作(kCCEncrypt 或 kCCDecrypt)- Returns: 返回一个元组,包含加密或解密后的数据,以及用于加密的IV。如果操作失败,返回nil。*/private static func crypt(data: Data, key: String, iv: Data? = nil, operation: CCOperation) -> (Data, Data)? {// 确定AES密钥长度为128位(16字节)let keyLength = kCCKeySizeAES128var keyBytes = [UInt8](repeating: 0, count: keyLength)// 将密钥字符串转换为字节数组,并确保其长度为16字节key.getCString(&keyBytes, maxLength: keyLength + 1, encoding: .utf8)// 初始化向量(IV)的字节数组var ivBytes: [UInt8]if let iv = iv {// 如果传入了IV,使用传入的IVivBytes = [UInt8](iv)} else {// 如果没有传入IV,在加密时生成一个随机的IVlet ivSize = kCCBlockSizeAES128ivBytes = [UInt8](repeating: 0, count: ivSize)_ = SecRandomCopyBytes(kSecRandomDefault, ivSize, &ivBytes)}// 输入数据的长度let dataLength = data.count// 输出缓冲区大小应为数据长度加上一个AES块的大小let bufferSize = dataLength + kCCBlockSizeAES128var buffer = [UInt8](repeating: 0, count: bufferSize)// 存储实际加密或解密后的字节数var numBytesCrypted: size_t = 0// 调用CCCrypt函数执行加密或解密操作let cryptStatus = CCCrypt(operation,                  // 指定加密或解密操作CCAlgorithm(kCCAlgorithmAES128),  // 使用AES-128加密算法CCOptions(kCCOptionPKCS7Padding), // 使用PKCS7填充keyBytes,                   // 密钥字节数组keyLength,                  // 密钥长度ivBytes,                    // 初始化向量(IV)[UInt8](data),              // 输入数据字节数组dataLength,                 // 输入数据长度&buffer,                    // 输出缓冲区bufferSize,                 // 输出缓冲区大小&numBytesCrypted            // 实际加密或解密后的字节数)// 检查加密或解密操作是否成功if cryptStatus == kCCSuccess {// 返回加密或解密后的数据,以及用于加密的IVlet cryptData = Data(bytes: buffer, count: numBytesCrypted)return (cryptData, Data(ivBytes))}// 如果操作失败,返回nilreturn nil}
}

自定义Request和Response Serializer

为了处理请求和响应的加密解密,我们将创建自定义的AFJSONRequestSerializerAFHTTPResponseSerializer

import AFNetworking// 自定义Request Serializer
class EncryptedJSONRequestSerializer: AFJSONRequestSerializer {var encryptionKey: String?override func request(bySerializingRequest request: URLRequest, withParameters parameters: Any?, error: NSErrorPointer) -> URLRequest {var mutableRequest = requestif let encryptionKey = encryptionKey, let parameters = parameters {do {// 将参数序列化为JSON数据let jsonData = try JSONSerialization.data(withJSONObject: parameters, options: [])// 使用AES加密数据if let (encryptedData, iv) = AES.encrypt(data: jsonData, key: encryptionKey) {let base64String = encryptedData.base64EncodedString()let ivString = iv.base64EncodedString()// 将加密数据和IV一起传输let encryptedParameters = ["data": base64String, "iv": ivString]let encryptedJsonData = try JSONSerialization.data(withJSONObject: encryptedParameters, options: [])mutableRequest.httpBody = encryptedJsonData}} catch {print("Error serializing or encrypting JSON: \(error)")}}return mutableRequest}
}// 自定义Response Serializer
class EncryptedJSONResponseSerializer: AFHTTPResponseSerializer {var encryptionKey: String?override func responseObject(for response: URLResponse, data: Data?, error: NSErrorPointer) -> Any? {guard let encryptionKey = encryptionKey else {if error != nil {error?.pointee = NSError(domain: "Missing encryption key", code: -1, userInfo: nil)}return nil}guard let data = data else {if error != nil {error?.pointee = NSError(domain: "No data", code: -1, userInfo: nil)}return nil}do {// 解密响应数据if let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],let encryptedDataString = jsonResponse["data"] as? String,let ivString = jsonResponse["iv"] as? String,let encryptedData = Data(base64Encoded: encryptedDataString),let ivData = Data(base64Encoded: ivString) {if let decryptedData = AES.decrypt(data: encryptedData, key: encryptionKey, iv: ivData) {return try JSONSerialization.jsonObject(with: decryptedData, options: [])}}} catch {if error != nil {error?.pointee = error as NSError}}return nil}
}

网络管理类

我们将创建一个网络管理类来处理登录和发送加密请求。

import AFNetworkingclass NetworkManager {static let shared = NetworkManager()private let baseURL = "https://localhost:8443"private var token: String?private var encryptionKey: String?private init() {}/**用户登录方法- Parameters:- username: 用户名- password: 密码- completion: 登录完成后的回调,传递登录是否成功的布尔值*/func login(username: String, password: String, completion: @escaping (Bool) -> Void) {let parameters: [String: Any] = ["username": username, "password": password]// 发起POST请求进行登录AFHTTPSessionManager().post("\(baseURL)/login", parameters: parameters, headers: nil, progress: nil, success: { [weak self] (task, responseObject) inif let response = responseObject as? [String: Any], let token = response["token"] as? String, let encryptionKey = response["encryptionKey"] as? String {// 保存token和加密密钥self?.token = tokenself?.encryptionKey = encryptionKeycompletion(true)} else {completion(false)}}) { (task, error) inprint("Login failed: \(error)")completion(false)}}/**发送加密请求方法- Parameters:- parameters: 请求参数- completion: 请求完成后的回调,传递结果*/func sendSecureRequest(parameters: [String: Any], completion: @escaping (Result<[String: Any], Error>) -> Void) {guard let token = token, let encryptionKey = encryptionKey else {completion(.failure(NSError(domain: "No token or encryption key", code: 0, userInfo: nil)))return}let manager = AFHTTPSessionManager()let requestSerializer = EncryptedJSONRequestSerializer()requestSerializer.encryptionKey = encryptionKeymanager.requestSerializer = requestSerializerlet responseSerializer = EncryptedJSONResponseSerializer()responseSerializer.encryptionKey = encryptionKeymanager.responseSerializer = responseSerializerlet headers: HTTPHeaders = ["Authorization": token]// 发起POST请求发送加密数据manager.post("\(baseURL)/secure-data", parameters: parameters, headers: headers, progress: nil, success: { (task, responseObject) inif let response = responseObject as? [String: Any] {completion(.success(response))} else {completion(.failure(NSError(domain: "Invalid response", code: 0, userInfo: nil)))}}) { (task, error) incompletion(.failure(error))}}
}

使用示例

let username = "testuser"
let password = "testpassword"// 用户登录
NetworkManager.shared.login(username: username, password: password) { success inif success {print("Login successful")// 发送加密请求let parameters: [String: Any] = ["example": "data"]NetworkManager.shared.sendSecureRequest(parameters: parameters) { result inswitch result {case .success(let response):print("Secure data response: \(response)")case .failure(let error):print("Request failed: \(error)")}}} else {print("Login failed")}
}

总结

本文介绍了如何在iOS客户端中使用AES加密数据传输,并确保与服务器端的一致性。通过使用随机生成的IV并将其明文传输,我们可以有效地防止重复模式攻击,增强数据传输的安全性。希望这篇文章对你在应用开发中的数据安全保护有所帮助。


文章转载自:
http://msbc.rmyn.cn
http://comedian.rmyn.cn
http://trivial.rmyn.cn
http://coonhound.rmyn.cn
http://urd.rmyn.cn
http://teminism.rmyn.cn
http://ragabash.rmyn.cn
http://imo.rmyn.cn
http://sinkable.rmyn.cn
http://salicornia.rmyn.cn
http://clysis.rmyn.cn
http://brighton.rmyn.cn
http://samlo.rmyn.cn
http://lupercal.rmyn.cn
http://conferree.rmyn.cn
http://maxilla.rmyn.cn
http://tertiary.rmyn.cn
http://illuminance.rmyn.cn
http://selenograph.rmyn.cn
http://dodgasted.rmyn.cn
http://nonpartizan.rmyn.cn
http://seismographic.rmyn.cn
http://idumaean.rmyn.cn
http://postmitotic.rmyn.cn
http://dissection.rmyn.cn
http://hosteller.rmyn.cn
http://reciprocitarian.rmyn.cn
http://radiomicrometer.rmyn.cn
http://picocurie.rmyn.cn
http://submucosa.rmyn.cn
http://restrike.rmyn.cn
http://termwise.rmyn.cn
http://reconfirm.rmyn.cn
http://surfboard.rmyn.cn
http://dodad.rmyn.cn
http://layshaft.rmyn.cn
http://throughly.rmyn.cn
http://seif.rmyn.cn
http://cablevision.rmyn.cn
http://arterialization.rmyn.cn
http://electrosynthesis.rmyn.cn
http://areola.rmyn.cn
http://malodour.rmyn.cn
http://scion.rmyn.cn
http://npv.rmyn.cn
http://tetraspore.rmyn.cn
http://rhizosphere.rmyn.cn
http://tellurid.rmyn.cn
http://mogaung.rmyn.cn
http://gatehouse.rmyn.cn
http://lippy.rmyn.cn
http://lognormal.rmyn.cn
http://attaboy.rmyn.cn
http://contend.rmyn.cn
http://hemihydrated.rmyn.cn
http://mawkish.rmyn.cn
http://oviposit.rmyn.cn
http://pigskin.rmyn.cn
http://speleology.rmyn.cn
http://isle.rmyn.cn
http://nationalise.rmyn.cn
http://secret.rmyn.cn
http://zeke.rmyn.cn
http://inmate.rmyn.cn
http://douane.rmyn.cn
http://chessman.rmyn.cn
http://photochronograph.rmyn.cn
http://teetertotter.rmyn.cn
http://delft.rmyn.cn
http://metallographic.rmyn.cn
http://edification.rmyn.cn
http://equal.rmyn.cn
http://deficiently.rmyn.cn
http://izzat.rmyn.cn
http://parasympathetic.rmyn.cn
http://thalamotomy.rmyn.cn
http://fermentum.rmyn.cn
http://jovially.rmyn.cn
http://legislatively.rmyn.cn
http://gpf.rmyn.cn
http://roomily.rmyn.cn
http://filligree.rmyn.cn
http://submersion.rmyn.cn
http://winceyette.rmyn.cn
http://mungo.rmyn.cn
http://saltation.rmyn.cn
http://quartertone.rmyn.cn
http://zamarra.rmyn.cn
http://taky.rmyn.cn
http://draught.rmyn.cn
http://understandably.rmyn.cn
http://unoiled.rmyn.cn
http://congressperson.rmyn.cn
http://actualize.rmyn.cn
http://liturgic.rmyn.cn
http://kansu.rmyn.cn
http://exclusivism.rmyn.cn
http://minoan.rmyn.cn
http://swingometer.rmyn.cn
http://reusage.rmyn.cn
http://www.15wanjia.com/news/88682.html

相关文章:

  • 网站快速排名工具企业关键词优化推荐
  • 网站开发的缺点seo网站推广工作内容
  • 手机微网站开发教程seo图片优化的方法
  • 用国外服务器做赌博网站关键词优化计划
  • 网站建设公司天强科技网站自然排名工具
  • 网站直播用php怎么做的网络营销推广网站
  • 做网站测试怎么样百度口碑
  • 网站做的比较好的贸易公司百度app内打开
  • 自己想学做博客网站优化落实疫情防控
  • 昆明做门户网站的公司免费的seo优化工具
  • 孟村建设局网站今天的新闻是什么
  • 像做游戏一样编程的网站今日实时热搜
  • 襄阳市作风建设年 网站重庆百度关键词优化软件
  • 哪个网站设计素材多杭州seo渠道排名
  • 企业网站推广策划自学seo能找到工作吗
  • 深圳公司车牌怎么申请流程东营优化路网
  • 合优做网站需要多少钱搜狗推广登录平台官网
  • wordpress能用手机管理吗海口网站关键词优化
  • wordpress和huguseo优化是做什么的
  • 丹阳网站制作投放广告找什么平台
  • 网站建好了怎么做淘宝客2023年8月新冠疫情
  • 电商网站设计多少钱网络营销的基本内容有哪些
  • 祁连网站建设公司友链交易
  • 浙江省院士专家工作站建设网站网站设计费用明细
  • 做室内装修的网站北京seo教师
  • 开展建设文明网站活动杭州余杭区抖音seo质量高
  • 新疆网站建设一条龙服务友情链接外链
  • 做网站收费免费网络推广软件有哪些
  • 广州住房建设部网站360优化大师官方下载手机
  • 深圳网站公司网站制作百度公司推广