IOS中的用户安全
用户安全:
原则:在网络传输过程中,关于用户的密码是不能传递明文的,需要通过加密之后进行传递,
一般采用的加密技术是:
(1)md5+盐
(2)hmac+md5
(3)hmac+md5+时间戳 这里的时间戳每次加密的密码结果不一样,密码有效时间是1分钟。它更加安全。
md5:同样的数据,每次进行加密的结果都是采用32位的字符串
它是不可逆的,常用的密码,可以在cmd5.com查询到。
生成数据的特征码,成为信息的指纹,信息摘要
base64:是可逆的。
//
// ViewController.m
// post-login(登陆)
//
// Created by jerry on 15/10/14.
// Copyright (c) 2015年 jerry. All rights reserved.
// #import "ViewController.h"
#import "NSString+Hash.h"
#import "SSKeychain.h"
/**
* 安全隐患:
尽管发送数据的过程中,密码进行了“二进制”转化,但是实际上密码还是一个明文,(密文) 解决办法:base64编码(base加密)
base64是网络上使用最为广泛的一种编码格式。
作用:可以将二进制数据转换成字符串。 有时候网络请求,希望只传递字符串:
1.url中的参数,直接带上图片传输。
2.银联的网银接口把整个消费的凭据生成一个数据的格式然后进行base64的编码,编码完成后,再传给服务器。 base64特点:
编码过后的结果,只有64个字符。a~z A~Z 0~9 / + 再加上一个辅助字符 = */
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameText;
@property (weak, nonatomic) IBOutlet UITextField *pwdText; @end @implementation ViewController
- (IBAction)loginClick { // 加密
NSString *username = self.nameText.text;
// NSString *pwd = [self base64encode:self.pwdText.text ];
// 简单的md5加密
// NSString *pwd = self.pwdText.text.md5String; // 加盐
NSString *salt = @"@##$#@SDS!@#WD!$!";
NSString *pwd = [[self.pwdText.text stringByAppendingString:salt] md5String];
NSLog(@"%@",pwd);
// 1.url
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"];
// 2.request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy: timeoutInterval:2.0f]; request.HTTPMethod = @"POST";
NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@",username,pwd];
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; // 3.connection
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 反序列化
id result = [NSJSONSerialization JSONObjectWithData:data options: error:NULL]; NSLog(@"%@",result);
// 跟服务端进行沟通
if ([result[@"userId"] intValue] > ) {
#define kLoginUserNameKey @"kLoginUserNameKey"
#define kLoginUserPwdKey @"kLoginUserPwdKey"
// 登录成功 记录用户信息,记录到偏好设置里
[[NSUserDefaults standardUserDefaults] setObject:username forKey:kLoginUserNameKey]; // [[NSUserDefaults standardUserDefaults] setObject:pwd forKey:kLoginUserPwdKey]; //为了及时保存,需要同步
[[NSUserDefaults standardUserDefaults] synchronize];
#define kLoginServiceName @"kLoginServiceName"
/**
* 参数
setPassword:用户密码的明文
forService:登录的服务名
account:用户的用户名
*/
[SSKeychain setPassword:self.pwdText.text forService:kLoginServiceName account:self.nameText.text];
}
}];
}
-(void)viewDidLoad
{
[super viewDidLoad];
// NSLog(@"%@",[self base64encode:@"A"]);
// NSLog(@"%@",[self base64encode:@"Man"]);
//
// 取出用户信息
self.nameText.text = [[NSUserDefaults standardUserDefaults] stringForKey:kLoginUserNameKey]; // NSString *pwd = [[NSUserDefaults standardUserDefaults] stringForKey:kLoginUserPwdKey];
//
// if (pwd) {
// self.pwdText.text = pwd;
// }
// 打印出来存储的所有的钥匙串的服务信息。密码是打印不出来的。
NSLog(@"%@",[SSKeychain allAccounts]);
// 显示出来,取出钥匙串里面的信息。
if (self.nameText.text.length > ) {
NSString *pwd = [SSKeychain passwordForService:kLoginServiceName account:self.nameText.text];
self.pwdText.text = pwd;
}
}
/**
* 解码
*
* @param str
*
* @return
*/
- (NSString *)base64decode:(NSString *)str
{
if (str.length>&&str!=NULL){
// 1.先把base64编码过后的字符串转换成二进制数据,
NSData *data = [[NSData alloc]initWithBase64EncodedString:str options:]; return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
}else{
return @"";
} }
/**
* BASE64转换。 j加密
*
* @param str
*
* @return
*/
- (NSString *)base64encode:(NSString*)str
{
// 1.把字符串转换成二进制数据
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; return [data base64EncodedStringWithOptions:];
} @end
IOS中的用户安全的更多相关文章
- 苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功
苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功 这是苹果wwdc2021 推出的新功能 参考官网链接 App Store Server API | Apple Deve ...
- iOS中数据库应用基础
iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...
- 正则表达式在iOS中的运用
1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
- RSA算法及其在iOS中的使用
因为项目中需要传输用户密码,为了安全需要用RSA加密,所以就学习了下RSA加密在iOS中的应用. 关于RSA的历史及原理,下面的两篇文章讲的很清楚了: http://www.ruanyifeng.c ...
- iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)
关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...
- iOS中获取各种文件的目录路径的方法
我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...
- 1.0 iOS中的事件
本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: UIK ...
- iOS中事件传递过程
iOS中,UIApplication管理着一个事件的队列,当系统获取用户的点击或滑动等事件后,就会将这些事件按顺序插入UIApplication管理的这个队里中,UIApplication再从这个队列 ...
随机推荐
- debian 系统安装配置apache
安装sshapt-get install ssh-server (安装失败请插入镜像)service ssh start Apache 服务安装apt-get install apache2 apa ...
- 【BZOJ2424】[HAOI2010]订货(费用流)
[BZOJ2424][HAOI2010]订货(费用流) 题面 BZOJ 洛谷 题解 傻逼费用流吧... 一开始理解错意思了,仓库大小为\(m\)的含义是留到下个月最多为\(m\),而不是任意时刻的容量 ...
- 修复Mysql主从不同步shell
使用第三方工具MySQL Enterprise Monitor,MySQL企业版监控工具.MONyog – MySQL Monior and Advisor,MONyog大家都不陌生,windows下 ...
- 离线安装.NET 3.5
最近为系统新增一个功能,写完以后进行部署,发现在IIS7上部署没有问题,但是IIS6上部署会出现未知情况,具体表现为取不到数据,估计是IIS6和IIS7直接的差异导致程序异常退出. 为了重现异常,在本 ...
- poco
源码安装: 1, ./configure --omit=Data/MySQL,Data/ODBC,Zip,Crypto,NetSSL_OpenSSL --no-samples --no-te ...
- win+R快捷启动程序
win10: Win+R cmd:命令行程序 notepad:记事本 winword:word文档 calc:记事本 mspaint:画图 wordpad:写字板
- findbugs的使用
我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现. 在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还有 ...
- (stringstream toupper 空格) 词组缩写 hdu2564
词组缩写 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Python基础【day03】:集合入门(三)
本节内容 1.集合常用方法总结2.定义3.关系测试 集合是无序的,天生不重复的数据组合,它的作用如下: 去重,即:把一个列表变成集合,就去重了 关系测试,即:测试两组集合的交集.并集和差集等 一.集合 ...
- vue基础篇---vue组件
vue模块第一篇,因为公司马上要用到这vue开发.早就想好好看看vue了.只有实际工作中用到才会进步最快.vue其他的简单指令就不多讲了,没啥意思,网上一大堆.看w3c就ok. 组件这个我个人感觉坑蛮 ...