用户安全:

  原则:在网络传输过程中,关于用户的密码是不能传递明文的,需要通过加密之后进行传递,

    一般采用的加密技术是:

      (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中的用户安全的更多相关文章

  1. 苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功

    苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功 这是苹果wwdc2021 推出的新功能 参考官网链接 App Store Server API | Apple Deve ...

  2. iOS中数据库应用基础

    iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...

  3. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  4. iOS 中的 HotFix 方案总结详解

    相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...

  5. RSA算法及其在iOS中的使用

    因为项目中需要传输用户密码,为了安全需要用RSA加密,所以就学习了下RSA加密在iOS中的应用. 关于RSA的历史及原理,下面的两篇文章讲的很清楚了:  http://www.ruanyifeng.c ...

  6. iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  7. iOS中获取各种文件的目录路径的方法

    我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...

  8. 1.0 iOS中的事件

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”   在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: UIK ...

  9. iOS中事件传递过程

    iOS中,UIApplication管理着一个事件的队列,当系统获取用户的点击或滑动等事件后,就会将这些事件按顺序插入UIApplication管理的这个队里中,UIApplication再从这个队列 ...

随机推荐

  1. BZOJ1468Tree——点分治

    题目描述 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K 输入 N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k 输出 一行,有多 ...

  2. MT【22】一道分母为混合型的放缩

    评:指数函数增长>幂函数增长>对数函数增长.

  3. 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包

    点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...

  4. 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表.Hosts_grou ...

  5. [luogu4403][bzoj1271][BJWC2008]秦腾与教学评估

    题目描述 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学们被要求八点起床,十一点回宿舍睡觉,不准旷课,上课不准迟到,上课不准睡觉--甚至连著名的北大三角地也在 ...

  6. WinRM不起作用 Connecting to remote server failed with the following error message : WinRM cannot complete the operation

    当我运行下面的 powershell  脚本时: $FarmAcct = 'domain\user'  $secPassword = ConvertTo-SecureString 'aaa' -AsP ...

  7. 设计模式 (二)——观察者模式(Observer,行为型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.观察者模式(Observer Pattern)属于行为型模式,在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都 ...

  8. c c++ 混合编译

    单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: 1 2 3 4 5 6 7 8 9 /* helloworld.cpp */    # ...

  9. 洛谷P1850 换教室

    令人印象深刻的状态转移方程... f[i][j][0/1]表示前i个换j次,第i次是否申请时的期望. 注意可能有重边,自环. 转移要分类讨论,距离是上/这次成功/失败的概率乘相应的路程. 从上次的0/ ...

  10. 洛谷P3952 时间复杂度

    大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...