IOS学习 网络HTTP 加密 base64,md5,hamo,时间戳
2016-04-26 17:07
591 查看
#import "ViewController.h"
#import "NSString+Hash.h"
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
[self
demo6];
}
// 时间戳密码:动态密码! U盾/将军令/手机令牌
密码一致在改变!
-(void)demo6{
// 原始密码:
NSString *password =
@"zhang";
// hmacKey
NSString *hmacKey =
@"8a627a4578ace384017c997f12d68b23";
// 获得当前时间:
NSDate *date = [NSDate
date];
NSLog(@"%@",date);
// 设定当前时间的格式
NSDateFormatter *fommatter = [[NSDateFormatter
alloc]
init];
[fommatter setDateFormat:@"yyyy-MM-dd HH:mm"];
// 获得当前时间的字符串
NSString *time = [fommatter
stringFromDate:date];
NSLog(@"当前时间time:%@",time);
// 第一次 hmac
运算(原始密码 + hmacKey)
password = [password hmacMD5StringWithKey:hmacKey];
// 拼接字符串(第一次 hmac
运算之后的结果 +
当前时间)
password = [password stringByAppendingString:time];
// 第二次 hmac
运算(之前拼接后的字符串 + hmacKey)
得到的密码就是动态密码了!
password = [password hmacMD5StringWithKey:hmacKey];
NSLog(@"动态密码: %@",password);
}
// hmac 加密算法,目前在国内渐渐流行!
-(void)demo5{
// 因为要在 Block
中修改这个值!
所以
添加 __block
__block
NSString *password =
@"hello";
NSURL *url = [NSURL
URLWithString:@"http://127.0.0.1/httpLogin/hmackey.php"];
// 发送网络请求
[[[NSURLSession
sharedSession] dataTaskWithURL:url
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
// JSON --> OC
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:NULL];
NSString *hmacKey = dict[@"hmacKey"];
NSLog(@"hmacKey: %@",hmacKey);
// 用从服务器得到的 hmacKey
对密码进行 hmac
运算.
password = [password hmacMD5StringWithKey:hmacKey];
NSLog(@"%@",password);
}] resume];
}
// MD5加密:现在一般用作身份验证/校验!
-(void)demo4{
NSString *str =
@"hello";
// 对字符串进行 MD5
加密/运算
// 如果用作加密/
服务器和客户端采用相同的加密算法计算!
str = str.md5String;
NSLog(@"str: %@",str);
NSString *strM =
@"helloh";
strM = strM.md5String;
NSLog(@"strM:%@",strM);
// 市面上所谓的解密,其实不是反向解密!是在数据库中查询记录!
NSString *str1 =
@"heshiqiufengbeihuashan521";
str1 = str1.md5String;
NSLog(@"%@",str1);
// MD5 加密,针对简单的密码,可以通过一些网站查出来!
//http://www.cmd5.com
// 人为的增加密码难度! MD5
加盐(盐加的多一点)
// (用户密码 +
盐值) MD5
运算!
NSString *password =
@"123456";
// 盐值 (服务器和客户端的盐值是一样的就OK)
越咸(长/复杂)越好
NSString *salt =
@"!@#$%^&*()_wertyuiop[1234567890-=";
// 给密码添加盐值
password = [password stringByAppendingString:salt];
// MD5 运算
password = password.md5String;
// md5 加盐,是一种比较高级的加密算法!
NSLog(@"%@",password);
}
// base64 解密
-(void)demo3{
// 1.拿到加密之后的base64二进制数据
NSData *base64Data = [NSData
dataWithContentsOfFile:@"/Users/liaojianguo/zlf/私密图片"];
// 将 base64加密之后的二进制数据,转换成普通的二进制数据
NSData *data = [[NSData
alloc] initWithBase64EncodedData:base64Data
options:0];
[data writeToFile:@"/Users/liaojianguo/zlf/解密之后的图片"
atomically:YES];
// base64 缺点: 1.加密之后的数据中有
= 号!很容易解密!
// 2.容易解密!
加密之后的数据,比原来的数据变大((8-6)/6) 1/3!
}
// base64 加密文件
-(void)demo2{
// 1.需要得到文件的二进制数据!
NSData *data = [NSData
dataWithContentsOfFile:@"/Users/liaojianguo/zlf/images/png image/apple.png"];
// 2.将得到的文件二进制数据,进行base64加密
NSData *base64Data = [data
base64EncodedDataWithOptions:0];
// 3.将加密之后的数据,存储
[base64Data writeToFile:@"/Users/liaojianguo/zlf/私密图片"
atomically:YES];
}
// base64 加密字符串!
-(void)demo1{
// 普通的 8bit
二进制数据!
NSString *str =
@"hello world";
NSData *data = [str
dataUsingEncoding:NSUTF8StringEncoding];
// 将字符串进行 base64
加密
// base64加密之后的二进制数据
NSData *base64Data = [data
base64EncodedDataWithOptions:0];
// base64加密之后的字符串
NSString *base64String = [data
base64EncodedStringWithOptions:0];
NSLog(@"data : %@",data);
NSLog(@"base64Data : %@",base64Data);
NSLog(@"base64String : %@",base64String);
}
#import "NSString+Hash.h"
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
[self
demo6];
}
// 时间戳密码:动态密码! U盾/将军令/手机令牌
密码一致在改变!
-(void)demo6{
// 原始密码:
NSString *password =
@"zhang";
// hmacKey
NSString *hmacKey =
@"8a627a4578ace384017c997f12d68b23";
// 获得当前时间:
NSDate *date = [NSDate
date];
NSLog(@"%@",date);
// 设定当前时间的格式
NSDateFormatter *fommatter = [[NSDateFormatter
alloc]
init];
[fommatter setDateFormat:@"yyyy-MM-dd HH:mm"];
// 获得当前时间的字符串
NSString *time = [fommatter
stringFromDate:date];
NSLog(@"当前时间time:%@",time);
// 第一次 hmac
运算(原始密码 + hmacKey)
password = [password hmacMD5StringWithKey:hmacKey];
// 拼接字符串(第一次 hmac
运算之后的结果 +
当前时间)
password = [password stringByAppendingString:time];
// 第二次 hmac
运算(之前拼接后的字符串 + hmacKey)
得到的密码就是动态密码了!
password = [password hmacMD5StringWithKey:hmacKey];
NSLog(@"动态密码: %@",password);
}
// hmac 加密算法,目前在国内渐渐流行!
-(void)demo5{
// 因为要在 Block
中修改这个值!
所以
添加 __block
__block
NSString *password =
@"hello";
NSURL *url = [NSURL
URLWithString:@"http://127.0.0.1/httpLogin/hmackey.php"];
// 发送网络请求
[[[NSURLSession
sharedSession] dataTaskWithURL:url
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
// JSON --> OC
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:NULL];
NSString *hmacKey = dict[@"hmacKey"];
NSLog(@"hmacKey: %@",hmacKey);
// 用从服务器得到的 hmacKey
对密码进行 hmac
运算.
password = [password hmacMD5StringWithKey:hmacKey];
NSLog(@"%@",password);
}] resume];
}
// MD5加密:现在一般用作身份验证/校验!
-(void)demo4{
NSString *str =
@"hello";
// 对字符串进行 MD5
加密/运算
// 如果用作加密/
服务器和客户端采用相同的加密算法计算!
str = str.md5String;
NSLog(@"str: %@",str);
NSString *strM =
@"helloh";
strM = strM.md5String;
NSLog(@"strM:%@",strM);
// 市面上所谓的解密,其实不是反向解密!是在数据库中查询记录!
NSString *str1 =
@"heshiqiufengbeihuashan521";
str1 = str1.md5String;
NSLog(@"%@",str1);
// MD5 加密,针对简单的密码,可以通过一些网站查出来!
//http://www.cmd5.com
// 人为的增加密码难度! MD5
加盐(盐加的多一点)
// (用户密码 +
盐值) MD5
运算!
NSString *password =
@"123456";
// 盐值 (服务器和客户端的盐值是一样的就OK)
越咸(长/复杂)越好
NSString *salt =
@"!@#$%^&*()_wertyuiop[1234567890-=";
// 给密码添加盐值
password = [password stringByAppendingString:salt];
// MD5 运算
password = password.md5String;
// md5 加盐,是一种比较高级的加密算法!
NSLog(@"%@",password);
}
// base64 解密
-(void)demo3{
// 1.拿到加密之后的base64二进制数据
NSData *base64Data = [NSData
dataWithContentsOfFile:@"/Users/liaojianguo/zlf/私密图片"];
// 将 base64加密之后的二进制数据,转换成普通的二进制数据
NSData *data = [[NSData
alloc] initWithBase64EncodedData:base64Data
options:0];
[data writeToFile:@"/Users/liaojianguo/zlf/解密之后的图片"
atomically:YES];
// base64 缺点: 1.加密之后的数据中有
= 号!很容易解密!
// 2.容易解密!
加密之后的数据,比原来的数据变大((8-6)/6) 1/3!
}
// base64 加密文件
-(void)demo2{
// 1.需要得到文件的二进制数据!
NSData *data = [NSData
dataWithContentsOfFile:@"/Users/liaojianguo/zlf/images/png image/apple.png"];
// 2.将得到的文件二进制数据,进行base64加密
NSData *base64Data = [data
base64EncodedDataWithOptions:0];
// 3.将加密之后的数据,存储
[base64Data writeToFile:@"/Users/liaojianguo/zlf/私密图片"
atomically:YES];
}
// base64 加密字符串!
-(void)demo1{
// 普通的 8bit
二进制数据!
NSString *str =
@"hello world";
NSData *data = [str
dataUsingEncoding:NSUTF8StringEncoding];
// 将字符串进行 base64
加密
// base64加密之后的二进制数据
NSData *base64Data = [data
base64EncodedDataWithOptions:0];
// base64加密之后的字符串
NSString *base64String = [data
base64EncodedStringWithOptions:0];
NSLog(@"data : %@",data);
NSLog(@"base64Data : %@",base64Data);
NSLog(@"base64String : %@",base64String);
}
相关文章推荐
- 利用HttpClient写的一个简单页面获取
- JAVA网络爬虫 实现爬取百度百家数据示例
- 网络接入技术(摘抄)
- [Unity热更新]tolua# & LuaFramework(九):网络通信实例
- Android中的http带参数网络请求,GET和POST
- 漫步云中网络
- android 与服务器用 http Post方法通迅
- Android图片的三级缓存机制之从网络中获取图片
- iptables 端口转发 实现访问内网的httpd服务
- [工作点滴]ssh/http clone本地项目的切换
- C# 中使用System.Net.Http.HttpClient 模拟登录博客园 (GET/POST)
- okhttp
- Node.js+Express构建Http服务(GET方式和POST方式)
- 常见的网络协议
- TCP的定时器系列 — 保活定时器 Keepalive
- 如何把一个web集群由HTTP转换为HTTPS(LVS+HAProxy+SSL)
- 如何把一个web集群由HTTP转换为HTTPS(LVS+HAProxy+SSL) 推荐
- [Python]网络爬虫(1):你要干什么?
- iOS边练边学--NSURLConnection发送HTTP请求以及NSString和NSData的相互转换
- 什么牌子的视频会议系统好?