一 数据安全
1 数据本身的安全(现代密码学)
1.1 数据保密
1.2 数据完整性验证
1.3 数据双向认证
2 数据防护安全
2.1 磁盘列阵
2.2 数据备份
2.3 异地容灾
 
3 术语
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥(也可以根据用途来分为加密密钥和解密密钥)
 
明文:没有进行加密,能够直接代表原文含义的信息

密文:经过加密处理处理之后,隐藏原文含义的信息
加密:将明文转换成密文的实施过程
解密:将密文转换成明文的实施过程
 
4 数据安全
数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是有对称算法与公开密钥密码体系两种(非对称算法),都包含了数据的加密和解密过程
对称算法:对称密码算法有时又叫传统密码算法,是指加密密钥可以从解密密钥中推算出来,反过来也成立。
非对称算法:对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。
加密算法有很多种,在iOS开发当中,MD5是我们常用的摘要算法。
 
二 MD5(Message Digest Algorithm 5)
1 哈希算法
哈希算法:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。
哈希值是一段数据唯一且极其紧凑的数值表示形式。数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。
典型的的哈希算法有:MD2、MD4、MD5 和 SHA-1等。
2 MD5
2.1 MD5:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
2.2 MD5算法具有以下特点:
a、 压缩性:任意长度的数据,算出的MD5值长度都是固定的(16进制,32位)。
b、容易计算:从原数据计算出MD5值很容易。
c、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
d、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
 
2.3 代码实现
2.4 小结
哈希算法是一种摘要算法,主要作用是用来获取数据的摘要。严格意义上来说不属于加密算法(因为没有解密过程)
 
 获取字符串的MD5值比较简单,其它对象可以先转化成NSData对象再进行操作
 
 可以根据路径直接获取文件数据,也可以将对象写入文件件后获取为NSData对象
 
 iOS同样支持SHA1、base64、AES、钥匙串等方式加密数据
 
三 钥匙串加密
钥匙串:(英文:Keychain)是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中和iOS7之后被导入,并且包括在了所有后续的各版本中。一个钥匙串可以包含多种类型的数据:密码(包括网站,FTP服务器,SSH帐户,网络共享,无线网络,群组软件,加密磁盘镜像等),私钥,电子证书和加密笔记等。
 
钥匙串使用
拷贝钥匙串类到工程中
引入标准头文件
生成钥匙串对象
存储加密的数据
获得钥匙串对象
获取加密的数据
 
3 钥匙串加密
苹果 iOS 和 Mac OS X 系统自带了一套敏感信息保存方案:"钥匙串" (Keychain)。
保存在钥匙串的内容相当于系统对其做了保护,在设备锁定时进行了加密处理
 
钥匙串中的条目称为SecItem,但它是存储在CFDictionary中的。SecItemRef类型并不存在。SecItem有五类:通用密码、互联网密码、证书、密钥和身份。在大多数情况下,我们用到的都是通用密码
 
钥匙串的使用和字典非常的相似
 
用原生的 Security.framework 就可以实现钥匙串的访问、读写。但是只能在真机上进行。通常我们使用KeychainItemWrapper来完成钥匙串的加密。
 
4 代码实现
注意:
        引入的头文件是MRC模式的,需要进行混编
获取对象的时候Identify必须一致
非系统key值是无法添加到字典中的
 
四 公匙加密
1  公匙加密简介
     1.1 公钥加密也叫非对称加密
     1. 2 常用算法有RSAElGamal、背包算法、Rabin等等,IOS中用的最多的是RSA