iOS网络数据安全

来源:互联网 发布:卸载软件找不到程序 编辑:程序博客网 时间:2024/05/18 01:07
iOS开发,做的是ipone手机端前台手机开发,是当今非常火的行业.但是在开发过程中, 我们要做的还要有数据安全的方面.其中就有个技术- MD5加密 - 里面都是,1616进制的数// 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
原创粉丝点击