iOS 密码学研究

程序开发中没有绝对的安全,只有相对的安全。当破解的成本 > 破解的利润,你的程序就是相对安全的。

昨天看直播中详细的介绍了关于iOS安全加密的各种方式,现在记录下,后期在增加内容。

1、HASH 加密:

在该加密中常用的方式是MD5加密

    1、不可逆运算;

2、对不同的数据加密,得到的结果是定长的32位字符;(不论是一个图片还是1个G的电影,经过加密之后都是32位的字符串)

3、对相对的数据加密,得到的结果是一样的;(一个数据经过复制之后,对这两个数据加密得到的是同一个32位字符串)

虽然不可逆,但是在实际开发中,不会直接使用MD5,因为现在反查询数据比较多,不够安全,http://www.cmd5.com/ 这个网站中可以根据32位字符反查询到你的密码;

NSString *pwdMd5 = pwd.md5String; -- 对密码进行单次加密,也可以进行双次md5加密


在实际开发中,对安全系数要求不太高的应用,一般会用加盐的方式对数据进行加密

NSString *salt = @"abc";

NSString *pwdSalt = [pwd stringByAppendingString:salt].md5String;

但加盐方式也不是绝对安全的,因为salt是由开发人员自定义的,当salt泄露时,就相当于整个程序的加密方式暴露了,很容易被别人破解;

-. HMAC 给定一个密钥,对明文加密,做两次"散列",得到的仍旧是32个字符;

-. 在实际开发中,密钥是服务器给的,一个账号对应一个key,当你注册时给你生成一个KEY

-. 关于HMAC逻辑

1.注册: 账号:发送给服务器,服务器校验是否是合法账号,如果是合法账号,服务器生成一个唯一的KEY值

     密码(HMAC加密):将HMAC(32位字符串)发给服务器,服务器保存HAMC密码;

2.登陆:

NSString  *hmacPwd = [pwd hmacMD5StringWithKey:"abc"]; // abc: 服务器随机生成的key值

这种方式破解之后只能得到一个人的key值,也只能得到一个人数据,不会把整个应用暴露出去,相对安全一些;

-.还有一种加密方式:HMAC + 服务器时间 + key值

登陆逻辑(当用户点击登陆按钮的这一刻)      ----- 目的:每次加密结果不一样!!!

客户端:

-. 生成HMAC密码;

-. (HMAC密码 + 服务器时间(精确到分钟)).md5 ;

-. 加上了事件的HASH值,发给服务器;

服务器:拥有的1.账号   2.HMAC密码  3.KEY

-.验证:(HMAC密码 + 服务器时间).md5

当服务器验证时,会有时间上的延迟,所有需要验证服务器当前时间的上一分钟(或者由服务器确定需要验证多少时间)

这种验证方式大大增加了应用的安全性,就算被获取了某些数据,也需要在规定的时间内破解,如果没有破解了,在下一分钟的密码就又不一样

2、对称加密: —— 传统加密方式

-明文 —> 密钥加密 —> 密文

-密文 —> 密钥解密 —> 明文

3、非对称加密:—— 现代加密方式

-公钥、私钥

-用公钥加密,用私钥解密

-用私钥加密,用公钥解密



猜你喜欢

转载自blog.csdn.net/u014305730/article/details/79062237