KVO: (Key—Value--Observe)键值观察者,是观察者设计模式的一种具体实现.
KVO:
//添加一个观察者
(第一个参数:被观察者第二个参数:哪一个属性被观察第三个参数:什么时候触发观察者的方法第四种参数:保险,可以添加一些字符串)
[self addObserver:selfforKeyPath:@"array" options: NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
//观察者触发的方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject: (id)objectchange:(NSDictionary *)change context:(void *)context{
NSLog(@"keyPath===%@", keyPath);
NSLog(@"object====%@", object);
NSLog(@"change====%@", change);
}
- (void)dealloc{
//只要使用KVO,就要写移除观察者的方法,在dealloc中写
[self removeObserver:selfforKeyPath:@"array"];
}
//MD5 --在一个文件中实现,对字符串进行加密
//准备好一个字符串
NSString *string = @"1";
//MD5加密是基于C语言的.所以要把这个字符串转化为C的字符串
const char *fooData = [string UTF8String];
//创建一个字符串数组接收MD5的值
unsigned char result[CC_MD5_DIGEST_LENGTH];
//计算MD5的值
//第一个参数:要加密的字符串
//第二个参数:获取要加密字符串的长度
//第三个参数:接收结果的数组
CC_MD5(fooData, (CC_LONG)strlen(fooData),result);
NSMutableString *resultstring =[NSMutableString string];
for (int i= 0; i < CC_MD5_DIGEST_LENGTH;i++) {
[resultstringappendFormat:@"%02X", result[i]];
}
NSLog(@"result====%@",resultstring);
//对数据加密
NSString *document= [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask,YES)objectAtIndex:0];
NSString *path = [documentstringByAppendingPathComponent: @"app.tex"];
NSArray *array = @[@"1",@"2"];
[array writeToFile:path atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:path];
NSLog(@"======%@", data);
//1.创建一个MD5的对象
CC_MD5_CTX md5;
//2.初始化MD5的对象
CC_MD5_Init(&md5);
//3.准备MD5的加密
CC_MD5_Update(&md5, data.bytes,(CC_LONG)data.length);
//4.准备一个字符串,存储MD5加密之后的数据
unsigned char resuly[CC_MD5_DIGEST_LENGTH];
//5.结束MD5的加密
CC_MD5_Final(resuly, &md5);
NSMutableString *resultString =[NSMutableString string];
for (int i = 0; i
[resultStringappendFormat:@"%02X", resuly[i]];
}
NSLog(@"result===%@",resultString);
*//钥匙串的加密和解密(可以用于界面通信)
//先引入KeychainItemWrapper类文件,在自定义的视图控制器上引入该头文件
//创建一个钥匙串对象
//参数1:表示这个钥匙串对象的标识符
//参数2:分组一般为nil
KeychainItemWrapper *wrapper =[[KeychainItemWrapper alloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil];
//钥匙串是类似于字典存储的,在存储的时候必须使用系统提供的两个key值,其他的存不进去
id kUserName = (__bridgeid)kSecAttrAccount;
id kPassWord = (__bridge id)kSecValueData;
//存入到串钥匙里边
[wrapper setObject:@"123"forKey:kUserName];
[wrapper setObject:@"abc"forKey:kPassWord];
//这里已经保存完成
#pragma获取秘钥数据
KeychainItemWrapper *newWrapper =[[KeychainItemWrapper alloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil];
NSString *userName = [newWrapperobjectForKey:kUserName];
NSString *passWord = [newWrapperobjectForKey:kPassWord];
NSLog(@"userName====%@,passWord=====%@", userName, passWord);
}
*//公钥,私钥
iOS使用RSA加密,只需要公钥
公钥和私钥都是使用证书生成的,并非自定义字符串就能行的.我们使用的是生成好的公钥和私钥.
//公钥,用于加密数据.用于公开,一般存放在数据提供方,例如iOS客户端.
//先引入RSA类文件,在自定义的视图控制器上引入该头文件
NSString *pubkey =@” ...... ” ;
//私钥,用于解密数据.必须保密,私钥泄露会造成安全问题.
NSString *privkey=@”..........”;
NSString *string =
@"亡灵";
NSString *encPubKey;//公钥加密的结果
NSString *decPrivkey;//私钥加密的结果
//使用RSA进行加密
//第一个参数:要加密的数据
//第二个参数:公钥
encPubKey = [RSA encryptString:stringpublicKey:pubkey];
NSLog(@"encPubKey====%@",encPubKey);
decPrivkey = [RSA decryptString:encPubKeyprivateKey: privkey];
NSLog(@"%@", decPrivkey);
//RSA加密之后得到的结果,每一次都不一样,但是都可以通过一个私钥进行解密
NSString *resultString=@"PWjpYjwTMviGRJowMeyixtqG+HZL6k8QfrZCBUmSdmStKUsRJuWzTYaSURR/oANJLvV5K9Lor1g1c3QNMGpzFKPAEZGxu2qp4pe+YRaQT+1LlSWFSOOrKZXxMhQIOGYR9xDYN1ComsnQ+yi0MDCl3zPNZ++sBmk5VyPE0RlYIJQ=";
decPrivkey = [RSAdecryptString:resultString privateKey: privkey];