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

出国越南做网站8000保底自己做的网站 能收索么

出国越南做网站8000保底,自己做的网站 能收索么,广州市官网网站建设哪家好,南京建设网站要多少钱在现代应用开发中#xff0c;确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输#xff0c;并与服务器端保持加密解密的一致性。本文不会包含服务器端代码#xff0c;但会解释其实现原理。 加密与解密的基本原理 AES#xff08;Advance… 在现代应用开发中确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输并与服务器端保持加密解密的一致性。本文不会包含服务器端代码但会解释其实现原理。 加密与解密的基本原理 AESAdvanced Encryption Standard是一种对称加密算法即加密和解密使用相同的密钥。为了增强安全性AES通常与CBCCipher Block Chaining模式和随机生成的初始化向量IV一起使用。 为什么IV明文传输不会影响安全性 防止重复模式IV确保相同的明文在每次加密时产生不同的密文从而防止攻击者通过观察加密输出模式来推断输入模式。随机性和唯一性IV的唯一要求是随机性和唯一性而不需要保密。因此IV可以以明文形式与加密数据一起传输。加密标准大多数现代加密标准和协议如AES-CBC、AES-GCM都规定IV可以以明文形式传输。 客户端实现方案 在iOS客户端中我们将使用以下步骤来实现AES加密数据传输 生成和存储加密密钥在用户登录成功后从服务器获取并存储加密密钥。加密请求数据在每次发送请求时使用AES和随机生成的IV对请求数据进行加密并将IV与加密数据一起传输。解密响应数据在接收到服务器响应后使用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 为了处理请求和响应的加密解密我们将创建自定义的AFJSONRequestSerializer和AFHTTPResponseSerializer。 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:8443private 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://www.hkea.cn/news/14310540/

相关文章:

  • 网站建设 响应式 北京做网站要求什么软件
  • 建立网站信息发布登记制度手机网站开发存储数据
  • 万户网络做网站怎么样自己开发网站要多少钱
  • 让网站会员做产品标签确认网站策划职业规划
  • 建网站多少钱 万户网站制作过程合理步骤是什么
  • 二手书的网站建设怎么修改地图的公司地址
  • 天津自助建站软件申请免费网站注册
  • 网络公司怎么优化网站赚钱秒到账的游戏
  • 神马网站快速排名软件百度贴吧的互动社区
  • 游戏网站开发需求分析陈木胜怎么死的
  • 在线制作网站免费网站开发与运营方向和企业管理方向
  • 网站建设美文wordpress调取指定分类下的文章
  • 网站开发前端是什么网站pv uv
  • wordpress 建站新浪微博关联wordpress
  • 网站建设三方合同范本wordpress和discuz关联
  • 做网站去哪个平台网站建设及托管合同模板
  • 繁体版 企业网站做网站卖彩票
  • wap网站是什么意思啊类似交费网站开发
  • 网站建设文案装修设计软件哪个好用免费
  • 江苏省住房和城乡建设厅政务网站营销网站建设平台
  • 企业网站建设步骤数据库导入wordpress
  • 德州哪里有做网站推广的wordpress建小程序
  • 做网站产品介绍外贸创业
  • 什么网站做网页好大型网站建设济南兴田德润o评价
  • WordPress网站文章导出导入logo在线设计图片
  • 智慧旅游网站开发与设计与实现做程序网站需要什么代码吗
  • 贵州网站中企动力建设做销售在那个网站找
  • 天津重型网站建设风格网站建设多久可以学会
  • 类似稿定设计的网站家电网站策划
  • 管家网站破解wordpress邀请码