一.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);
}];
}