iOS网络数据安全
来源:互联网 发布:卸载软件找不到程序 编辑:程序博客网 时间:2024/05/18 01:07
iOS开发,做的是ipone手机端前台手机开发,是当今非常火的行业.但是在开发过程中, 我们要做的还要有数据安全的方面.其中就有个技术- MD5加密 - 里面都是,16个16进制的数// 1.对字符串 MD5加密(是基于 C 语言)CC_MD5(字符串,长度,数组)// 2.对其他对象类型加密(都先转为 NSData 类型)//声明变量CC_MD5_CTX md5;// 初始化CC_MD5_Init(&md5);// 准备 MD5加密, NAData 的语言类型CC_MD5_Update(& md5, data.bytes, (CC_LONG)data.length)// 结束加密unsigned char result[CC_MD5_DIGEST_LENGTH];CC_MD5_Final(result, &md5)// 封装其他对象加密// 将其他对象类型进行 MD5加密(都先转为 NSData 类型)- (void)MD5WithData:(NSData *)data { // 1.先声明 MD5变量 CC_MD5_CTX md5; // 2.对这个变量初始化 CC_MD5_Init(&md5); // 3.准备开始进行 MD5加密 // 3.1 MD5变量地址 // 3.2 NSdata 的 C 语言类型 // 3.3 data 的长度 CC_MD5_Update(& md5, data.bytes, (CC_LONG)data.length); // 4.结束加密(加密结束,会把转化好的字符给我们) unsigned char result[16]; CC_MD5_Final(result, &md5); // 5.遍历拼接 NSMutableString *mdStr = [NSMutableString string]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [mdStr appendFormat:@"%02X",result[i]]; } NSLog(@"Data进行 MD5加密:%@",mdStr);}//3. 封装 NSArray 对象 MD5加密总结: ***字典,数组,集合类比较特殊,这些类型到底能不能归档,(NSData),取决于放在容器中的类型有没有遵守 NSCoding协议- (void)MD5WithArray:(NSArray *)array { // 1.array 转为 NSData,复杂对象转 Data NSData *arrData = [NSKeyedArchiver archivedDataWithRootObject:array]; [self MD5WithData:arrData]; 比如:图片的加密: UIImage *image = [UIImage imageNamed:@"1.jpg"]; // 图片转为 data NSData *imageData = UIImageJPEGRepresentation(image, 1); [self MD5WithData:imageData];//4. 封装 Person 对象加密 (自己创建的 person要遵守 NSCoding 协议,并且要进行编码, 解码)- (void)MD5WithPerson:(Person *)person { // 系统归档(转为 Data) // 一个对象 NSData *perData = [NSKeyedArchiver archivedDataWithRootObject:person]; [self MD5WithData:perData];// 拓展// 归档方案二: 归档多个对象 Person *p1 = [[Person alloc]init]; p1.name = @"shaoqiong"; p1.age = 18; Person *p2 = [[Person alloc]init]; p2.name = @"shaoqiong2"; p2.age = 18; // 1.创建一个可变的 data NSMutableData *data = [NSMutableData data]; // 2.创建一个归档对象 // 作用就是把复杂的对象归档好, 写到可变 data 中 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; // 进行多个对象的归档 [archiver encodeObject:p1 forKey:@"p1"]; [archiver encodeObject:p2 forKey:@"p2"]; // 归档结束之后, 结束归档 [archiver finishEncoding];// 注意,反归档 - 就是讲 NSData 转为复杂对象, // 归档 - NSKeyedArchiver- 持久化// 反归档 - NSKeyedUnarchiver - 得到数据// 反归档:// 从持久化得归档文件中读取 data NSData *readData = [NSData dataWithContentsOfFile:filePath]; // 创建反归档对象 NSKeyedUnarchiver *unArchiver = [[ NSKeyedUnarchiver alloc]initForReadingWithData:readData]; Person *readPerson1 = [unArchiver decodeObjectForKey:@"p1"]; Person *readPerson2 = [unArchiver decodeObjectForKey:@"p2"];// 向钥匙串中写入(用户名,密码) 导入第三方文件KeychainItemWrapper// 向钥匙串写东西(用户名和密码)// *钥匙串是系统级别的,支持的数据保存(保存在其中的数据是进行加密过得)类型不多. eg:账号,密码,证书,密钥(yue)- (void)writeToKeychainWithUserName:(NSString *)userName password:(NSString *)password { // 1.创建一个 KeychainItemWrapper 钥匙串访问对象 // 1.1 钥匙串访问对象的标识(自定义,但是读取的时候,要保持一致) // 1.2 ?进行共享分组的设置 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"1" accessGroup:nil]; // **key 不支持自定义, key 由系统来定 // foundation 框架中的类型,与 coreFoundation(CF, 里面都是 c 语言) 中的类型进行转换,一般需要,建一个桥(_bridge) [wrapper setObject:userName forKey: (id)kSecAttrAccount]; // kSecValueData,这个键值一般保存一些值, eg:密码 [wrapper setObject:password forKey:(id)kSecValueData];}// 读取钥匙串中的用户名和密码- (void)readFromKeychain { // 钥匙串访问对象, 想读的时候,必须跟存入的时的钥匙串对象的标识保持一致 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"1" accessGroup:nil]; // 取出,kSecAttrAccount对应的值 NSString *uesr = [wrapper objectForKey:(id)kSecAttrAccount]; // 取出,kSecValueData对应的值 NSString *password = [wrapper objectForKey:(id)kSecValueData]; NSLog(@"uesr:%@,password:%@",uesr,password);}// 非对称加密// 密钥分为:公钥和私钥,公钥一般用来加密,私钥一般用来解密- (void)RSAwithString:(NSString *)str { // 先拿到公钥和私钥 NSString *publicKey = @"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEChqe80lJLTTkJD3X3Lyd7Fj+\nzuOhDZkjuLNPog3YR20e5JcrdqI9IFzNbACY/GQVhbnbvBqYgyql8DfPCGXpn0+X\nNSxELIUw9Vh32QuhGNr3/TBpechrVeVpFPLwyaYNEk1CawgHCeQqf5uaqiaoBDOT\nqeox88Lc1ld7MsfggQIDAQAB\n-----END PUBLIC KEY-----"; NSString *privateKey = @"-----BEGIN RSA PRIVATE KEY-----\nMIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQKGp7zSUktNOQk\nPdfcvJ3sWP7O46ENmSO4s0+iDdhHbR7klyt2oj0gXM1sAJj8ZBWFudu8GpiDKqXw\nN88IZemfT5c1LEQshTD1WHfZC6EY2vf9MGl5yGtV5WkU8vDJpg0STUJrCAcJ5Cp/\nm5qqJqgEM5Op6jHzwtzWV3syx+CBAgMBAAECgYEApSzqPzE3d3uqi+tpXB71oY5J\ncfB55PIjLPDrzFX7mlacP6JVKN7dVemVp9OvMTe/UE8LSXRVaFlkLsqXC07FJjhu\nwFXHPdnUf5sanLLdnzt3Mc8vMgUamGJl+er0wdzxM1kPTh0Tmq+DSlu5TlopAHd5\nIqF3DYiORIen3xIwp0ECQQDj6GFaXWzWAu5oUq6j1msTRV3mRZnx8Amxt1ssYM0+\nJLf6QYmpkGFqiQOhHkMgVUwRFqJC8A9EVR1eqabcBXbpAkEA3DQfLVr94vsIWL6+\nVrFcPJW9Xk28CNY6Xnvkin815o2Q0JUHIIIod1eVKCiYDUzZAYAsW0gefJ49sJ4Y\niRJN2QJAKuxeQX2s/NWKfz1rRNIiUnvTBoZ/SvCxcrYcxsvoe9bAi7KCMdxObJkn\nhNXFQLav39wKbV73ESCSqnx7P58L2QJABmhR2+0A5EDvvj1WpokkqPKmfv7+ELfD\nHQq33LvU4q+N3jPn8C85ZDedNHzx57kru1pyb/mKQZANNX10M1DgCQJBAMKn0lEx\nQH2GrkjeWgGVpPZkp0YC+ztNjaUMJmY5g0INUlDgqTWFNftxe8ROvt7JtUvlgtKC\nXdXQrKaEnpebeUQ=\n-----END RSA PRIVATE KEY-----"; NSString *originStr = @"bowen"; // RSA的加密(使用公钥) - 导入第三方文件 // 生成密文,公有 NSString *secretedStr = [RSA encryptString:originStr publicKey:publicKey]; NSLog(@"secrestedStr = %@",secretedStr); // 解密, 私有 NSString *unSecrestedStr = [RSA decryptString:secretedStr privateKey:privateKey]; NSLog(@"----%@",unSecrestedStr);}}
0 0
- iOS网络数据安全
- 【iOS】MD5加密与网络数据安全
- iOS开发网络篇—数据安全
- ios网络开发篇 -数据安全
- iOS开发 - 网络数据安全加密(MD5)
- iOS开发 - 网络数据安全加密(MD5)
- iOS开发网络篇—数据安全
- iOS开发网络—05数据安全
- iOS开发网络篇—数据安全
- 【iOS】MD5加密与网络数据安全
- iOS - 网络数据安全加密(MD5)
- IOS开发网络篇—数据安全
- iOS开发网络篇—数据安全
- iOS开发网络—数据安全
- iOS开发网络篇—数据安全
- 【iOS】MD5加密与网络数据安全
- IOS:用户(网络&本地)数据的安全
- iOS开发网络篇—数据安全
- Playframework中文小站
- Java Collection
- 容器的emplace成员函数
- 技术团队负责人应该具备怎样的能力
- ArrayAdapter和SimpleAdapter详解
- iOS网络数据安全
- swift之应用程序管理
- 随笔
- c++实验1-求两个数的和差
- 堆栈与程序指针
- Objective-C学习笔记(四):OC之分类、类对象、description方法和SEL
- 杭电1237简单计算器
- android 发送长短信失败的原因
- 哈理工oj 1739 sort problem【思维、水题】