对称加密 —— AES DES
明文数据 ——》密钥 ——》密文
密文数据 ——》密钥 ——》明文
非对称加密 —— RSA (性能低)
——公钥加密,私钥解密
——私钥加密,公钥解密
密码:哈希(不可逆)
哈希:MD5 ;32位字符。
数据 —— HASH —— 密文(32位字符)
无限数据 ——> 实现的表现形式 (32位可以表现无限的数据大小)
一个或多个不同的数据 有相同的HASH值!(撞衫)(散列碰撞)
所以,HASH:用作密码的加密。
注册是如何完成的?
用户:手机号码:相同密码
客户端(HASH值) ——> HASH值
(eg:使用HASH值之后,找回密码 变成 重置密码,本地不再保存密码)
1.本地不允许明文保存用户密码!
2.网络不允许明文传输用户密码!
(注:浏览器使用对称加密,在用户允许下保存密码,安全系数较高)
指纹\人脸识别:是否可以代替密码?可以,前提条件:密码:证明账号是你的,指纹/人脸:证明手机是你的;
www.cmd5.com(md5查询网站);
//加盐:混合字符进行MD5处理
固定加盐:pwd= [pwd stringByAddendingString:@"dficvfj"].md5String;
//技术层面靠谱,业务层面不靠谱:技术人员知道盐,盐不可改,不够安全,多安全隐患;
//最好的盐:一个用户一个盐
//更好的方式 HMAC加密(也是哈希)
1.使用一个密钥加密,并且做两次散列
2.在实际开发中,密钥来自服务器
pwd= [pwd hmacMD5StringWithKey:@"来自服务器的key"];(一个账户一个key)
登录中,客户端-服务器加密流程//问题:当一直传哈希密码的时候,可以获取登录权限?应用安全依然丢失;
//让哈希密码每次不一样
1.HMAC密码(32位)
2.(HMAC密码 + "时间戳").MD5 ————>服务器: 验证:HMAC密码 + "时间戳".MD5 验证失败 ————> HMAC密码 + "时间戳-1分钟).MD5 【ps.使用服务器给的时间戳】
ps.超时?使用 -你的网络不好?服务器繁忙。
//不要直接使用。系统库函数
1.很容易被下断点,符号断点
2.使用第三方或者打包一个库
//RSA算法(非对称) Https通讯原理
Http通讯概念1.数据体量大 使用对称加密
2.对称加密的公钥 数据小 使用非对称加密
1和2完成Https安全通讯
证书:服务器从私钥生成公钥,公钥对应的HASH值发给客户端,客户端通过hash验证公钥;
数字签名原理:
客户端签名逻辑1.客户端:数据报文 ——》算出HASH值——》HASH值进行RSA加密 ——》报文和RSA加密参数一并发到服务器;
2.服务器:1.拿到报文——》一样的算法算出HASH值 ;2.RSA加密的HASH解密出来;对比1和2 是否相同;
ps.iOS系统的应用签名:双重数字签名;
MachO文件;
MachO知识非常重要!!!ios所有的可执行文件都是使用
1.应用的加载原理,启动优化,
2.DYLD
网友评论