MD5加密/加盐/时间戳密码/base64


一.MD5加密

{

    >1 Security框架

    

    >2 加密方式

    NSString *password = @"zhang";

    password = [password md5String];

    

    // 单纯的 MD5 加密不安全,如果用户密码比较简单,可以通过一些网站查询到加密结果!

    

    // MD5 "加盐".

    // "盐值" :越 "咸"越好. 要求足够复杂! 32 64 128 256 位

    // 定义盐值

    NSString *salt = @"!@#$%^&*()QWERTYUIOPMNBVCXZitcast";

    

    // 原始密码拼接盐值.

    password = [password stringByAppendingString:salt];

    

    // MD5 加密

    password = password.md5String;

}

 

二.时间戳密码/动态密码

{

    >1 时间戳密码/动态密码:

    // 用户的密码是一定的. 每次发送网络请求传递给服务器的密码都不同!

    // 相同的密码,相同的加密算法,每次获得的值不相同.

    // 客户端和服务器的时间是相同的!

    

    >2 实现原理: 客户端和服务器采用相同的加密方式,以时间为基准进行加密!.

    

    >3 实现细节:

    // 1> 客户端和服务器的时间保持一致:具体加密过程中,要求时间格式也必须一致.

    

    // 2> 时间精度越高,越安全! 多长时间密码改变一次?  一分钟!

    

    // 3>

    // 客户端: 发送网络请求的时候,以"当前"时间做为基准,进行加密. 15:23:59

    // 服务器: 服务器接收到网络请求之后, 服务器以"当前"时间为基准,进行加密. 15:24:03

    // 服务器: 继续以当前时间的前一分钟为基准,进行数据加密.

    // 服务器:判断动态密码是否正确的时候:有两个判断值:当前时间的和上一分钟的值.

   

    >4 需要两次加密, hmacKey 后台提供

    // 1. 第一次 hmac 计算(加密):

    password = [password hmacMD5StringWithKey:hmacKey];

    

    // 2.1 将第一次加密之后的值与当前时间的字符串拼接.(时间格式要与服务器端一致)

    password = [password stringByAppendingString:timer];

    

    // 2.2 第二次 hmac 运算.

    password = [password hmacMD5StringWithKey:hmacKey];

}

 

三.base64Encoding加密解密

 

{

    使用base64Encoding对文件加密解密

    // 网络安全常识:

    // 1.对于私密信息,在本地保存,一定不能以明文的形式保存.

    // 2.私密信息在网络中不能以明文的形式传递.

    // base64加密原则: 6 bit(原8bit) 一个字节. 不足的位数 用0 补齐.两个0 用一个 = 表示.

    // 数据加密之后,数据量会变大,变大 1/3 左右.

    // iOS 7.0 之后开放的接口.

 

    1.加密

    >1.将要加密的文件转为二进制数据data

 

    >2.[data base64EncodedDataWithOptions:0] 加密成二进制数据

    [data base64EncodedStringWithOptions:0] 加密成字符串数据

 

    >3.写入文件

 

    2.解密

    >1.将要解密的文件转为二进制数据

    [str dataUsingEncoding:NSUTF8StringEncoding] //是字符串

 

    >2.[[NSData alloc] initWithBase64EncodedData:data options:0];

    [[NSData alloc] initWithBase64EncodedString:…]

 

    >3.写入文件

}

 

 
 

四.钥匙串存储--SSKeychain 第三方框架

{

    >1 钥匙串保存密码:

    // 可以在钥匙串中直接保存密码明文!

    

    >2 钥匙串使用--存储

    NSString *password = @"zhang";

    

    // 将密码保存在钥匙串中.

    // 取出应用程序的唯一标识符.

    NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;

    

    // Service :用来标识应用程序的!

    // account :用来标识账号信息. 密码对应的账号.

    [SSKeychain setPassword:password forService:bundleID account:kUserNameKey];

 

    >3 钥匙串密码--读取:

    // 根据应用程序的 唯一标识符 取出钥匙串中保存的密码:

    NSString *password = [SSKeychain passwordForService:bundleID account:kUserNameKey];

    

    >4 利用钥匙串保存密码的优点:

    // 1. 安全!

    // 2. 钥匙串有自己独特的存储位置,并不存在于每一个沙盒中.当用户删除应用程序之后,钥匙串中存储的密码信息不会被删除!

}

 

五.cookie

{

    >1 cookie: 网络信息块.用来存储信息的!

    // cookie会自动登录!会将 cookie 中存储的信息自动发送给服务器.

    

    >2 查看 cookie 中的信息.

    // NSHTTPCookieStorage :这个类中/对象存储了所有的 cookie 信息.

    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

    

    // 取出 storage 中保存的 cookie 信息.

    [storage.cookies enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

        

        NSHTTPCookie *cookie = obj;

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

    }];

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM