IOS学习 网络HTTP 加密 base64,md5,hamo,时间戳

来源:互联网 发布:mysql in用什么取代 编辑:程序博客网 时间:2024/06/04 20:15

#import "ViewController.h"

#import "NSString+Hash.h"

@interface ViewController ()

@end

@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [selfdemo6];

}


// 时间戳密码:动态密码! U/将军令/手机令牌密码一致在改变!

-(void)demo6{

    // 原始密码:

    NSString *password =@"zhang";

    

    // hmacKey

    NSString *hmacKey =@"8a627a4578ace384017c997f12d68b23";

    

    // 获得当前时间:

    NSDate *date = [NSDatedate];

    

    NSLog(@"%@",date);

    

    // 设定当前时间的格式

    NSDateFormatter *fommatter = [[NSDateFormatteralloc] init];

    [fommatter setDateFormat:@"yyyy-MM-dd HH:mm"];

    

    // 获得当前时间的字符串

    NSString *time = [fommatterstringFromDate: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

    __blockNSString *password = @"hello";

    

    NSURL *url = [NSURLURLWithString:@"http://127.0.0.1/httpLogin/hmackey.php"];

    

    // 发送网络请求

    [[[NSURLSessionsharedSession] dataTaskWithURL:urlcompletionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {

     

//          NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

        

        // JSON --> OC

        

        NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:0error: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 = [NSDatadataWithContentsOfFile:@"/Users/liaojianguo/zlf/私密图片"];

    

    // base64加密之后的二进制数据,转换成普通的二进制数据

    NSData *data = [[NSDataalloc] initWithBase64EncodedData:base64Dataoptions:0];

    

    [data writeToFile:@"/Users/liaojianguo/zlf/解密之后的图片"atomically:YES];

    

    // base64 缺点: 1.加密之后的数据中有 = !很容易解密!

    // 2.容易解密!加密之后的数据,比原来的数据变大((8-6)/6) 1/3!

}


// base64 加密文件

-(void)demo2{

    // 1.需要得到文件的二进制数据!

    NSData *data = [NSDatadataWithContentsOfFile:@"/Users/liaojianguo/zlf/images/png image/apple.png"];

    

    // 2.将得到的文件二进制数据,进行base64加密

    NSData *base64Data = [database64EncodedDataWithOptions:0];

    

    // 3.将加密之后的数据,存储

    [base64Data writeToFile:@"/Users/liaojianguo/zlf/私密图片"atomically:YES];

}


// base64 加密字符串!

-(void)demo1{

    // 普通的  8bit二进制数据!

    NSString *str =@"hello world";

    NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];

    

    // 将字符串进行 base64加密

    

    // base64加密之后的二进制数据

    NSData *base64Data = [database64EncodedDataWithOptions:0];

    // base64加密之后的字符串

    NSString *base64String = [database64EncodedStringWithOptions:0];

    

    NSLog(@"data : %@",data);

    NSLog(@"base64Data : %@",base64Data);

    NSLog(@"base64String : %@",base64String);


}


0 0
原创粉丝点击