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];

posted on 2016-04-07 22:13  钎探穗  阅读(155)  评论(0编辑  收藏  举报