iOS-应用安全02Hash及对称加密

238 阅读2分钟

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)对数据进行加密