06、数据安全

一、常用术语
  • 密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称秘钥。
  • 明文:没有进行加密,能够直接代表原文含义的信息
  • 密文:经过加密处理之后,隐藏原文含义的信息
  • 加密:将明文转换成密文的实施过程
  • 解密:将密文转换成明文的实施过程
二、MD5

MD5:名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
MD5算法的特点:

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的128位 二进制,32位 十六进制。
  • 容易计算:从原数据计算出MD5值很容易。
  • 抗修改性:对源数据进行任何改动,哪怕只改一个字节,所得到的MD5值都有很大差别。
  • 强抗碰撞:已知源数据及其MD5值,想找到一个具有相同MD5值的数据是非常困难的。
    使用MD5加密时,首先要引入头文件,在进行如下操作,例如对NSString类型进行加密
#import //加密相关的头文件
//MD5对字符串进行加密  128位的二进制,   32位 十六进制
-(void)md5MethodWithSourceingString:(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* resultStr=[[NSMutableString alloc] init];
   for (int i=0; i

使用MD5对NSData类型的数据进行加密,例如加密图片

//用MD5对NSData类型进行加密
-(void)md5WithsourceData:(NSData*)sourceData{
    //创建MD5变量
    CC_MD5_CTX md5;
    //初始化MD5变量
    CC_MD5_Init(&md5);
    //准备MD5加密
    //第一个参数就是MD5变量取地址
    //第二个参数就是要进行加密的数据 bytes是将NSData转换为c语言的二进制类型
    //第三个参数就是数据长度
    CC_MD5_Update(&md5, sourceData.bytes, (CC_LONG)sourceData.length);
    //结束MD5加密
    // 接收加密好的数据容器
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(result, &md5);
    NSMutableString* resultStr=[[NSMutableString alloc] init];
    for (int i=0; i
三、SHA-1

SHA1安全散列算法(英语:Secure Hash Algorithm)是一种能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。
例如SHA-1对字符串进行加密

//SHA-1加密  160位 二进制     40位 十六进制
-(void)shaMethodWithSourceingString:(NSString*)sourceString{
    //用的是c语言的函数进行的加密,所以我们需要将字符串转换为c语言字符串
    const char* str = sourceString.UTF8String;
    //声明一个c语言的字符数组用来存放加密之后的所有字符
    unsigned char result[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(str, (CC_LONG)strlen(str), result);
     NSMutableString* resultStr=[[NSMutableString alloc] init];
    for (int i=0; i

SHA-1对NSData类型的数据进行加密,这里加密图片

//用SHA-1对NSData类型进行加密
-(void)shaWithsourceData:(NSData*)sourceData{
    //创建MD5变量
    CC_SHA1_CTX sha;
    //初始化MD5变量
    CC_SHA1_Init(&sha);
    //准备MD5加密
    CC_SHA1_Update(&sha, sourceData.bytes, (CC_LONG)sourceData.length);
    //结束MD5加密
    unsigned char result[CC_SHA1_DIGEST_LENGTH];
    //结束加密
    CC_SHA1_Final(result, &sha);
    NSMutableString* resultStr=[[NSMutableString alloc] init];
    for (int i=0; i
四、钥匙串加密

钥匙串(英文:Keychain)是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中被导入,并且包括在了所有后续的Mac OS版本中,包括Mac OS X。一个钥匙串可以包含多种类型的数据:密码(包括网站,FTP服务器,SSH帐户,网络共享,无线网络,群组软件,加密磁盘镜像等),私钥,电子证书和加密笔记等。KeyChain是一种对称加密
(1)首先拖入KeychainItemWrapper的.m和.h文件
(2)在工程的Build Phases设置的Compile Sources下给KeychainItemWrapper.m后面加上-fno-objc-arc,让这个非arc的类可以在arc工程下编译
(3)在Link Binary With Libraries下面加上Security.framework

06、数据安全_第1张图片
Snip20161221_1.png

接下来进行加密就可以了

//钥匙串加密
//一般用在保存我们不希望发生变化的数据,例如应用程序的UUID,在iOS7之后,我们将应用程序卸载重装,应用程序的UUID可能会发生变化,我们不希望它一直变化,就可以将UUID存储在钥匙串中
-(void)keychain{
    //初始化工具类
    //第一个参数:当前工具的标识符,为了取值的时候,可以根据标识符找到对应的工具
    //第二个参数:一般填工程的唯一标识符,一般是用来区分是哪个工程所保存的数据
    KeychainItemWrapper* key=[[KeychainItemWrapper alloc] initWithIdentifier:@"yf" accessGroup:@"com.xalo.Test-01.Senior-secret-YF"];
    //存储用户名和密码
    //使用和字典基本一致,但是key必须使用系统提供的,不能自己定义
   [key setObject:@"用户名" forKey:(__bridge id)kSecAttrAccount];
   [key setObject:@"密码" forKey:(__bridge id)kSecValueData];
    
    //清除钥匙串中存储的数据
   // [key resetKeychainItem];
    NSString* userName= [key objectForKey:(__bridge id)kSecAttrAccount];
    NSLog(@"%@",userName);
    NSString* passWord= [key objectForKey:(__bridge id)kSecValueData];
    NSLog(@"%@",passWord);
   
}

你可能感兴趣的:(06、数据安全)