/*
GET输入汉字会崩,url没有添加%转义stringByAddingPercentEscapesUsingEncoding
post不用%转义也不会崩,要设置HTTPMothed 设置请求体
目标:搭接面,在UI界面输入用户名和密码,不要在代码里面输入,return处理
目标:自动登录
用偏好设置保存
问题:账号和密码不能明文保存
目标:base64编码 A->QQ== 没补两个0,加一个等号, 如果有返回值,调用方法直接得到加密好的字符串
如果没返回值,打印不出来,在内部加密了没有返回结果,外部获得不了加密结果
目标:给用户信息加密,什么时候加密?登陆成功加密,保存在偏好设置里面,读取用户信息的时候解密
目标:给服务器传递的之前base64方法加密(不能在网络传输明文账号密码),服务器保存加密后的密码和用户名
问题:base64非常不安全,太容易解密,
方案1用哈希分类 先试用,直接调用分类方法
bug:重启电脑后程序崩溃,因为没打开阿帕奇服务器,url不能获取数据 $ sudo apachectl -k start
方案2:加盐
方案3:hmac (加字符串,md5两次) 每次结果相同,还是有可鞥被暴力破解,希望每次加密结果不同
方案4:时间戳 NSLog(@"%@",[NSDate date]);//直接可以获取时间,格林威治时间
方案5:服务器时间戳 本地时间跟服务器时间不同步,先获取服务器时间,同步获取
网络上返回本地的数据都是NSData,必须解析-反序列化 NSJSON
bug:账号密码不能登录@"http://127.0.0.1/loginhmac.php" 时间和key跟服务器都不同,肯定对不上
风险:用户第一次注册被拦截:?????? 辅助手段ip/电话
目标:钥匙串安全存储用户密码, base64不安全, md5不能逆运算,不能返回密码
利用第三方框架存储钥匙串,存到本地,网上传输的安全已经有保证了
bug:密码显示乱码
粗心了.self.pwd = [self timeHmac:self.pwd]; // 这样加密,后面用钥匙串加密,两种加密方式,登陆界面乱码
// 第一次运行会崩
目标:重构-单例保存登陆的代码,不能暴露给外界看,如何重构,什么方法抽取到其他文件?
用单例调用自己的私有方法 userLogin
没有从缓存中取到信息-->创建单例的时候调用loadUserInfo
小步骤的拷贝代码
目标:添加nav控制器done
目标:切换控制器,用通知,block,
通知:通知的使用步骤:注册通知中心,发送消息(登陆成功,发送消息),谁监听消息?监听到消息后跳转页面
为啥在appDelegate里面监听通知,因为要跳转页面,获得window,在vc中能更换window么?可以但是不太好
NSNotifactionCenter defaultCenter]post 发送
NSNotifactionCenter defaultCente] addObs 添加观察者
观察者方法@selector 用指定window是用sb实例化的VC UIStroyboard storyboardWithName;
self.window.rootcontrl = sb.instanceVC
目标:注销,通知注销后立刻又登陆了,登陆应在delegate里面?
目标:一个通知,不同事件, post object参数给两个@"Main" @"Login" 用notice.object区分
使用两个通知也可以,利用通知的object发送更多消息
使用通知的步骤:1.发送post 2.添加观察者addObs
NSNotifactionCenter defaultCenter]post 发送
NSNotifactionCenter defaultCente] addObs 添加观察者
目标:账号密码正确直接登陆done->在Appdelegate中创建单例,调用userlogin方法
bug:密码错误也登陆,发送了通知 [webData[@"userId"] intValue];加上intValue密码错误就不能登陆了
webData[@"userId"] > 0永远成立,后面的密码错误就不成立
目标:登陆失败弹框-block done
bug:第一次启动也弹框,判断,两个文本框都有内容才登陆,添加判断
目标:登陆会闪黄色登陆框->添加白色背景
如果UI更新很慢,可能是UI更新没在主线程
sum:post发送密码请求
时间戳记
重构
通知
*/