数据加密/数据安全:
l 安全的原则
Ø 1)在网络上不允许传输用户隐私数据的明文
Ø 2)在本地不允许保存用户隐私数据的明文
l 请求方法
Ø 一定要使用POST请求提交用户的隐私数据
Ø GET请求的所有参数都直接暴露在URL中
Ø 请求的URL一般会记录在服务器的访问日志中
Ø 服务器的访问日志是黑客攻击的重点对象之一
数据安全:
l 数据拦截(抓包工具)
Ø 仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题
Ø 可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据
Ø 因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交
l常用的加密算法
ØMD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES
l加密算法的选择
一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密
常见的加密算法描述如下:
Base64编码:
l说明
ØHTTP将Base64编码用于基本的认证和摘要认证。
Ø其可以方便的将用户的任何输入转换成只包含特定字符的安全格式,服务于网络通信过程。
l特点
Ø1)可以将任意的二进制数据进行Base64编码。
Ø2)所有的数据都能被编码为并只用65个字符就能表示的文本文件。
Ø3)编码后的65个字符包括AZ,az,0~9,+,/,=
Ø4)对文件或字符串进行Base64编码后将比原始大小增加33%。
Ø5)能够逆运算
Ø6)不够安全,但却被很多加密算法作为编码方式
lBase64编码原理和过程:Base64编码原理
Ø1)将所有字符转化为ASCII码;
Ø2)将ASCII码转化为8位二进制;
Ø3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;
Ø4)统一在6位二进制前补两个0凑足8位;
Ø5)将补0后的二进制转为十进制;
Ø6)从Base64编码表获取十进制对应的Base64编码;
l处理过程
a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
b.数据不足3byte的话,则剩下的bit用0补足。每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
c.不断进行,直到全部输入数据转换完成。
d.如果最后剩下两个输入数据,在编码结果后加1个“=”;
e.如果最后剩下一个输入数据,编码结果后加2个“=”;
f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
如果是直接使用的话:
- 先对数据转化成二进制数据
再用系统的方法对数据进行base64编码处理,即[data base64EncodedStringWithOptions:0];
- 若相对base64解码,可以用系统方法
[[NSDataalloc]initWithBase64EncodedString:string options:0];对数据进行 base64解码,然后再对二进制数据转换成字符串
[[NSStringalloc]initWithData:data encoding:NSUTF8StringEncoding]
常见的安全处理机制:
l 单向散列函数 MD5|SHA1|SHA256|SHA512等
l 消息认证码 HMAC-MD5|HMAC-SHA1
l 对称加密 DES|3DES|AES(高级加密标准)
l 非对称加密 RSA
l 数字签名
l 证书
l 对消息加密解密的两种处理方式
Ø 1)只需要保存一个值,保证该值的机密性,而不需要知道原文
Ø 2)除了保证机密性外还需要对该值进行解密得到消息原文
单向散列函数:
Ø 1)对任意长度的消息散列得到散列值是定长的
Ø 2)散列计算速度快,非常高效
Ø 3)消息不同,则散列值一定不同
Ø 4)消息相同,则散列值一定相同
Ø 5)具备单向性,无法逆推计算
说明:
Ø 单向散列函数也称为消息摘要函数、哈希函数或者杂凑函数。
Ø 单向散列函数输出的散列值又称为消息摘要或者指纹
l 经典算法
Ø MD4、MD5、SHA1、SHA256、SHA512等
MD5算法:
l MD5简单说明
Ø MD5是由Rivest于1991年设计的单向散列函数
Ø 全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
Ø MD5的特点
Ø 对输入信息生成唯一的128位散列值(32个字符
Ø 明文不同,则散列值一定不同
Ø 明文相同,则散列值一定相同
Ø 根据输出值,不能得到原始的明文,即其过程不可逆
Ø MD5的应用
Ø 加密
Ø 搜索
Ø 文件完整性验证
Ø 安全性
Ø 1)MD5解密网站:http://www.cmd5.com
2)MD5的强抗碰撞性已经被证实攻破,即对于重要数据不应该再继续使用MD5加密
提交隐私数据的安全过程
注册:
先将密码经过MD5加密,然后得到的密文先传到服务器,服务器再把它存到数据库里面
结论:用户的隐私数据,只有在用户输入的那一刻是明文,其他情况下都密文
对MD5改进:
l 现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
Ø 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
Ø 先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
Ø 先乱序,后加密:先对明文字符串进行乱序处理,然后对得到的串进行加密
Ø 先乱序,再加盐,再MD5等
Ø 总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文
直接在项目中添加一个NSString + Hash的分类就可以计算散列函数了
消息认证码:
l 消息认证码特点
①消息的发送者和接收者有一个共享密钥
②发送者使用共享密钥对消息加密计算得到MAC值(消息认证码)
③消息接收者使用共享密钥对消息加密计算得到MAC值
④比较两个MAC值是否一致
l 经典算法
①HMAC-MD5(先用密钥加密,然后进行两次散列计算)
②HMAC-SHA1
对称加密算法:
l 对称加密的特点
Ø 加密/解密使用相同的密钥
Ø 是可逆的
Ø 经典算法
Ø DES
Ø 3DES
Ø AES
对称加密:
直接加入EncryptionTools的工具类
然后需要设置一个加密和解密使用的密钥
非对称加密算法:
l 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
l 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密
l 特点:
n 非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
n 对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了
RSA算法的实际应用:
l 由于RSA算法的加密解密速度要比对称算法的速度慢很多,在实际应用中,通常采取:
(1) 数据本身的加密解密使用对称加密算法(AES/DES3)
(2) 用RSA算法加密并传输对称算法所需的秘钥
除此之外,RSA算法还在身份认证(或称鉴权)以及数字签名方面得到广泛的使用
HTTPS请求:
https == http + ssl(secure socket layer,安全套接字层)
监测网络状态:
苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态
AFNetworkReachabilityManager