iOS之数据加密
2016-12-24 本文已影响93人
正义吖
MD5
- Message Digest Algorithm MD5(中文名为[消息摘要算法]第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
- MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的
####### 代码示例 MD5对字符串进行加密
//MD5对字符串进行加密
-(void)md5MethodWithSourceString:(NSString*)sourceString{
//用的是C语言的函数进行加密,所以我们需要将字符串转换为C语言字符串
const char* str = sourceString.UTF8String;
//声明一个C语言的字符串数组,用来存放加密之后的所有字符
unsigned char result[CC_MD5_DIGEST_LENGTH];
//md5加密
//第一个参数:要加密的参数
//第二个参数:要加密的字符串的长度
//第三个参数:用来接收加密好的字符的容器
CC_MD5(str, (CC_LONG)strlen(str), result);
//将加密好的字符数组中的字符转为16进制的字符串,以供使用
NSMutableString * resultString = [[NSMutableString alloc] init];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
//将C语言字符。转换为16进制的字符串
[resultString appendFormat:@"%02X",result[i]];
}
NSLog(@"加密好的数据为---%@",resultString);
// BDDDE9CA37FCFC0F23E97CA2AD8E111B @"我爱我"
// D8A5189B6D5D1B81698D25D27E1E651C @"我爱我哦"
// BDDDE9CA37FCFC0F23E97CA2AD8E111B @"我爱我"
}
####### 代码示例 MD5对字符串进行加密
//NSData类型进行MD5加密
-(void)md5MethodWithSourceData:(NSData*)sourceData{
//创建MD5变量
CC_MD5_CTX md5;
//初始化md5
CC_MD5_Init(&md5);
//准备MD5加密
//第一个参数:md5变量取地址
//第二个参数:要加密的数据
//第三个参数:数据的长度
CC_MD5_Update(&md5, sourceData.bytes, (CC_LONG)sourceData.length);
//结束MD5加密
//接收加密好的容器
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(result,&md5);
NSMutableString* resultString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[resultString appendFormat:@"%02X",result[i]];
}
NSLog(@"data类型md5加密之后的结果---%@",resultString);
}
sha-1 NSData类型进行sha-1加密
//SHA—1加密 160位 二进制。 40位 16进制。
- (void)shaMethodWithSourceString:(NSString*)sourceString{
//用的是C语言的函数进行加密,所以我们需要将字符串转换为C语言字符串
const char* str = sourceString.UTF8String;
unsigned char result[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(str,(CC_LONG)strlen(str),result);
NSMutableString* resultString = [[NSMutableString alloc] init];
for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
[resultString appendFormat:@"%02X",result[i]];
}
NSLog(@"sha-1加密之后的结果---%@",resultString);
}
//NSData类型进行sha-1加密
- (void)shaMethodWithSourceData:(NSData*)sourcedata{
///创建MD5变量
CC_SHA1_CTX sha1;
//初始化md5
CC_SHA1_Init(&sha1);
//准备MD5加密
//第一个参数:md5变量取地址
//第二个参数:要加密的数据
//第三个参数:数据的长度
CC_SHA1_Update(&sha1, sourcedata.bytes, (CC_LONG)sourcedata.length);
//结束MD5加密
//接收加密好的容器
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_SHA1_Final(result,&sha1);
NSMutableString* resultString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[resultString appendFormat:@"%02X",result[i]];
}
NSLog(@"data类型sha1加密之后的结果---%@",resultString);
}
钥匙串加密
//钥匙串加密 保存我们不希望发生变化的数据,例如应用程序的UUID,在iOS7之后,我们将应用程序卸载重装,应用程序的UUID可能会发生变化,我们不希望它一直变化,就可以将UUID存储在钥匙串中。
-(void)keychain{
//初始化工具类
//第一个参数:工具类的标志符,取值的时候可以根据标志符找到对应的工具
//accessGroup:一般填工程的唯一标志符,用来区分是那个工程所保存的数据
KeychainItemWrapper * wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"test" accessGroup:@"com.lanou.ly.senior-Secrity-06"];
// //存储用户名和密码
// //使用基本和字典一致,但是key必须使用系统提供的,不能自己定义。
// [wrapper setObject:@"用户名" forKey:(__bridge id)kSecAttrAccount];
// [wrapper setObject:@"密码" forKey:(__bridge id)kSecValueData];
//清除钥匙串中存储的数据
[wrapper resetKeychainItem];
//取值
NSString* userName = [wrapper objectForKey:(__bridge id)kSecAttrAccount];
NSLog(@"userName---%@",userName);
}