您的位置:首页 > 理论基础 > 计算机网络

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: