iOS之数据加密
2016-05-06 21:57
253 查看
常用术语
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数.(密钥分为对称密钥和非对称密钥,也可以根据途径分为加密密钥和解密密钥)
明文:没有进行加密,能够直接代表原文含义的信息
密文:经过加密处理之后,隐藏原文含义的信息
加密:将明文转换成密文的实施过程
解密:将密文转换成明文的实施过程
数据安全
数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是对对称算法与公开密匙密码体系两种(非对称算法),都包含了数据的加密和解密过程
对称算法:对称密码算法有时又叫传统密码算法,是指加密密钥可以从解密密钥中推算出来,反过来也成立
非对称算法:对是指加密密钥可以从解密密钥中推算出来,反过来不能成立
加密算法有很多种,在iOS开发中,常用的有得MD5和base64等等
MD5
MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
应用场景:登陆界面,签名,时间戳等
MD5算法具有以下几个提点:
压缩性:任意长度的数据,算出的MD5长度都是固定的(16进制,32位)
容易计算:从源数据计算出MD5值很容易
抗修改性:对源数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
强抗碰撞:已知源数据和其MD5值,想找到一个具有相同MD5值得数据(即伪造数据)是非常困难的
不可逆性的
具体实现过程:
base64
使用场景:数据(比如网易新闻,资讯类的信息)
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数.(密钥分为对称密钥和非对称密钥,也可以根据途径分为加密密钥和解密密钥)
明文:没有进行加密,能够直接代表原文含义的信息
密文:经过加密处理之后,隐藏原文含义的信息
加密:将明文转换成密文的实施过程
解密:将密文转换成明文的实施过程
数据安全
数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是对对称算法与公开密匙密码体系两种(非对称算法),都包含了数据的加密和解密过程
对称算法:对称密码算法有时又叫传统密码算法,是指加密密钥可以从解密密钥中推算出来,反过来也成立
非对称算法:对是指加密密钥可以从解密密钥中推算出来,反过来不能成立
加密算法有很多种,在iOS开发中,常用的有得MD5和base64等等
MD5
MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
应用场景:登陆界面,签名,时间戳等
MD5算法具有以下几个提点:
压缩性:任意长度的数据,算出的MD5长度都是固定的(16进制,32位)
容易计算:从源数据计算出MD5值很容易
抗修改性:对源数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
强抗碰撞:已知源数据和其MD5值,想找到一个具有相同MD5值得数据(即伪造数据)是非常困难的
不可逆性的
具体实现过程:
MD5加密字符串
+ (NSString*)md5String:(NSString*)sourceString { //由于md5加密都是通过c级别的函数来计算,所以需要将加密的字符串转换为c语言字符串 //1.获取c字符串 const char *cStr = sourceString.UTF8String; //2.创建一个C语言字符串数组,用来接收加密结束之后的字符串(接收MD5值) //一个字节是8位,两个字节是16位,两个字符可以表示一个16位进制的数,MD5结果为32,实际上由16位16进制数组成 unsigned char result[CC_MD5_DIGEST_LENGTH]; //3.计算MD5值(结果存储在result数组中) /* 第一个参数:需要加密的字符串 第二个参数:需要加密的字符串的长度 第三个参数:加密完成之后字符串存储的地方 */ CC_MD5(cStr, (CC_LONG)strlen(cStr), result); //4.将加密完成的字符拼接起来使用(16进制) //声明一个可变字符串类型,用来拼接转换好的字符 NSMutableString *resultStr = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [resultStr appendFormat:@"%02x",result[i]]; } NSLog(@"%@",resultStr); return resultStr; }
md5对data类型数据加密
+ (NSString*)md5Data:(NSData*)sourceData { //需要MD5变量并且初始化 CC_MD5_CTX 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]; //将数据放入result数组 CC_MD5_Final(result, &md5); //获取结果(将result中的字符拼接为OC语言中的字符串,以使我们使用) NSMutableString *resultStr = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [resultStr appendFormat:@"%02x",result[i]]; } NSLog(@"%@",resultStr); return resultStr; }
base64
使用场景:数据(比如网易新闻,资讯类的信息)
base64加密
+ (NSString*)base64EncoderWithData:(NSData*)sourceData { if(!sourceData) {//如果需要加密的数据为nil,不进行加密,直接返回 return nil; } NSString *resultStr = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; // [sourceData base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];返回的是NSData类型 return resultStr; }
base64解密(对于字符串)
+ (id)base64EncoderWithString:(NSString*)sourceString { if (!sourceString) { return nil; } //解密 NSData *resultData = [[NSData alloc] initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters]; return resultData; }
相关文章推荐
- iOS数据解析之JSON解析
- 深拷贝、浅拷贝
- iOS之数据解析之XML解析
- 自定义相册
- github如何上传iOS源代码(最精炼版)
- iOS 开发查看应用的沙盒文件
- IOS自动释放原理及详解
- iOS获取各种文件目录路径的方法
- iOS 沙盒目录结构介绍
- iOS源代码管理工具
- iOS9 新变动
- iOS之多线程
- 单例
- iOS 图片设置为圆角矩形,圆形等
- 我写过的软件之UniversalTest for iOS
- iOS 8 AutoLayout与Size Class
- iOS内存管理(一)
- iOS开发——创建你自己的Framework
- iOS NSDecimalNumber--货币计算
- iOS开发:音频播放、录音、视频播放、拍照、视频录制