Hash
hash特点:
- 算法是公开
- 对相同的数据运算,得到的结果是一样的;不同的数据运算后也有可能相同,称为散列碰撞
- 对不同数据运算,如MD5得到结果默认是128位(32字符,16进制标识)
- 不可逆,加密后不可解密
- 信息摘要,信息“指纹”,是用来做数据识别的
日常的Hash算法:MD5、SHA1/256...
用途
- 用户密码的加密
- 搜索引擎
- 版权
- 数字签名
用户密码的加密
用户密码在服务器中一般不会以明文的形式保存,会经过加密的形式保存,避免密码漏泄;服务器一般没有找回密码功能,只有重置密码功能; 日常中使用简单MD5加密会很容易被破解(www.cmd5.com/ 使用KEY-Value原理),所以一般会加盐eg:
static NSString * salt = @"JKHDSFHK*()&&";
//用户登录 -- 直接md5
NSString * pwd = @"123456";
pwd = [pwd stringByAppendingString:salt];//加盐
pwd = pwd.md5String;
HMAC加密方案:加盐确实是种可行的方案,一般盐都是固定的,所以还是容易被破解。
- 使用一个密钥加密,并且做了两次散列,得到的结果还是hash值;
- 在实际开发中,密钥来自于服务器
- 为了安全还会加时间戳(服务器的时间),受时间影响
数字签名
比如某段数据A需要涉及到很高的安全性;我们可以将这段数据A先进性hash得B,再将B进行RSA加密成C,并将A和C打包发给服务器,这样安全性就会很高;而此时C就是数字签名;
对称加密
像RSA是一种非对称加密,但是对大型数据加密时一般采用对称加密; DES:数据加密标准 3DES:使用3个密钥,对相同的数据执行三次加密 AES:高级加密标准
加密方案:
- ECB(Electronic Code Book):电子密码本模式。每一块数据独立加密;

- CBC(Cipher Block Chaining):密码分组链接模式。使用一个密钥和一个初始化向量(iv)对数据进行加密
