在做网络应用程序时,, 始终把确保用户数据的安全性, 因此要加密。
MD5算法在国内用的非常多. 

MD5算法的特点
*相同的数据加密结果是一样的.(32个字符)
*不可逆的.(不能逆向解密)
*可用于文件校验/指纹识别.

MD5算法是公开的,iOS中已经包装好了MD5算法。
能够将其写成字符串的分类:

- (NSString *)md5String
{
const char *string = self.UTF8String;
int length = (int)strlen(string);
unsigned char bytes[CC_MD5_DIGEST_LENGTH];
CC_MD5(string, length, bytes);
return [self stringFromBytes:bytes length:CC_MD5_DIGEST_LENGTH];
}

在iOS程序中对用户的登录数据进行加密存储很重要。

做到。即使数据被劫持。也无法还原出原始数据的地步。


一、普通MD5加密

太简单的MD5加密非常easy被破解。一般在进行MD5加密时会使用“加佐料”的方法。

简单的MD5可到这个站点进行破解:www.cmd5.com

以下是进行MD5加密的方法: 当中token即为加的字符串,能够为随意长度的奇形怪状字符串。
- (IBAction)login:(UIButton *)sender {
[self postLogin];
} /**提交用户数据的时候用post相对安全. 同一时候将用户数据转换成模型最好*/
- (void)postLogin {
//1.URL
NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login.php"];
NSURL *url = [NSURL URLWithString:urlStr];
//2.建立 Mutablerequest
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //3.设置
request.HTTPMethod = @"POST";
//请求体可在firebug中找 NSString *pwd = self.userPwd.text;
//先加盐, 用MD5加密. (server简单存储加盐与加密保存过的即可了). 现实中的情况有公钥/私钥, server并非简单存储密码.
pwd = [pwd stringByAppendingString:token];
pwd = [pwd md5String];
NSLog(@"%@", pwd); NSString *body = [NSString stringWithFormat:@"username=%@&password=%@", self.userName.text, pwd];
request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding]; //4.建立连接. (data即为取到的数据, 和get一样)
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@, %@", [NSThread currentThread], str); //更新显示须要在主线程中
[[NSOperationQueue mainQueue] addOperationWithBlock: ^{
self.label.text = str;
NSLog(@"%@, %@", [NSThread currentThread], str);
}];
}];
}

二、更加高级的方法


用公钥和私钥的概念。

一个公钥(都知道),一个私钥(仅仅有server自己知道).password要动态变化才行.
*用户:用token+时间进行加密,传送给server
*server:  取出用户password(存储时用私钥加过密),用时间+公钥等与client发送的password进行比較.(server还要检查发送password的时间差,1分钟以内)

具体见凝视:摘自老刘。


- (IBAction)login:(id)sender
{
NSString *pwd = self.pwdText.text;
// 进行MD5加密
pwd = [pwd stringByAppendingString:token];
// 每次都是一样的! 比如:黑客拦截了路由器中的数据
// 就行获得到加密后的password! pwd = [pwd md5String]; // 在server后台,保存的是用私有密钥加盐处理的MD5password串
pwd = [NSString stringWithFormat:@"%@%@%@", pwd, publicKey, @"2014062914:14:30"];
// 利用日期,可以保证加密生成的字符串不一样
pwd = [pwd md5String]; // 提交给server的内容:新的password,生成password的事件、
/**
server的处理: 1. 从server取出用户的password(是用私有密钥加密的)
2. server知道共同拥有密钥。依据给定的时间(动态生成新的password)。与client提交的password进行比較
3. server同一时候须要检查提交password的事件差值。跟client提交的日期偏差在1分钟之内。 */
NSLog(@"%@", pwd); [self postLogonWithUserName:self.userNameText.text password:pwd];
} #pragma mark - POST登录
- (void)postLogonWithUserName:(NSString *)userName password:(NSString *)password
{
// 1. url
NSString *urlStr = @"http://192.168.25.2/login.php";
NSURL *url = [NSURL URLWithString:urlStr]; // 2. request,POST方法。须要建立一个可变的请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 1> POST 方法,全部涉及用户隐私的数据传递,都须要用POST方式提交!
request.HTTPMethod = @"POST"; // 2> 数据体
NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, password]; // 将字符串转换成二进制数据
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; // 3. 发送“异步”请求。在其它线程工作。不堵塞当前线程程序运行
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 1> JSON,格式是和NSDictionary的高速包装格式很
// 将JSON转换成字典 Serialization
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:1 error:NULL]; CZUserInfo *userInfo = [CZUserInfo userInfoWithDict:dict]; NSLog(@"%@ %@", userInfo.userId, userInfo.userName);
}]; NSLog(@"=======");
}

转载请注明出处:http://blog.csdn.net/xn4545945



【iOS】MD5数据加密和网络安全的更多相关文章

  1. IOS关于数据加密(主要为登录加密)想总结的

    首先上来就来说一下,IOS常见的几种加密算法  *哈希(散列)函数 : MD5.SHA  *对称加密算法:DES.3DES.AES  *非对称加密算法:RSA 一.哈希(散列)函数  1.MD5 MD ...

  2. iOS MD5加密

    1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...

  3. Java工作流引擎关于数据加密流程(MD5数据加密防篡改)

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统 流程数据加密  md5  数据保密流程数据防篡改 ...

  4. iOS MD5加密实现方法

    使用方法 先导入头文件 #import "MD5.h" //md5测试 NSString * md1= [MD5 md5:" ]; NSLog(@"32bit= ...

  5. iOS MD5加密字符串

    参考:http://stackoverflow.com/questions/1524604/md5-algorithm-in-objective-c 在线测试MD5:http://www.cmd5.c ...

  6. iOS MD5加密算法

    考虑到用户账户安全,对用户的登录密码进行MD5加密 什么是MD5加密呢...懒了就不在这搬砖了,大家可以自己搜索查查,在此记录下代码,以供以后学习查询! 下面,直接上代码... // 需要倒入这个头文 ...

  7. iOS MD5 (Swift3)

    import Foundation extension Int { func hexedString() -> String { return NSString(format:"%02 ...

  8. ios MD5大小写加密

    #import "NSString+change.h" #import <CommonCrypto/CommonDigest.h> @implementation NS ...

  9. iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

    本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...

随机推荐

  1. Saltstack 安装使用

    Saltstack是一个具备puppet与func功能为一身的集中化,轻量级的自动化运维管理工具,使用python编写,功能非常强大,可以使用EPEL快速安装.相比较puppet,安装和配置更加容易和 ...

  2. .net机试题总结

    1.下面是一个由*号组成的4行倒三角形图案.要求:1.输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”:2.在屏幕上打印这个指定了行数的倒三角形. ******* ...

  3. 设计模式——工厂模式(Factory)

    要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...

  4. C. Captain Marmot (Codeforces Round #271)

    C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. ps设计资料整理

    零基础学会建立一个简单化妆品网站—前台设计篇1[PS画草图] http://xiebiji.com/2008/09/huazhuang4/?wptheme=Plainscape&ie=1 PS ...

  6. 编译命令行终端 swift

    So, this is where swift lives, after you've installed XCode 6 Beta: /Applications/Xcode6-Beta.app/Co ...

  7. mac 下有些工具 app 推荐

    打开推荐报价mac在工具app Evernote的 Evernote的贬值,课堂笔记软件,其主要功能是记录笔记,假设你想,它可用于使todo list, 甚至gtd, 或收集的知识归纳 Doit.im ...

  8. html学习笔记二

    html图片标记 <html> <head> <title>图片演示</title> </head> ----------------图片演 ...

  9. uitableView 选择跳过后, 跳回 颜色变化 问题

    今天遇到这个问题  谁也因此没有满足这方面的需求 今天会见 网上办理登机手续 未找到 好 我只能说自己的问题 但 幸好,kai哥 就攻克了 ! 就是在- (void)tableView:(UITabl ...

  10. 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview

    前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Li ...