网络安全
来源:互联网 发布:手机车辆管理查询软件 编辑:程序博客网 时间:2024/05/11 14:44
网络安全
- 术语:
- 密钥:密钥是一种参数,它是明文转换为密文或将密文转换为明文的算法中输入的参数.密钥分为对称密钥与非对称密钥(也可以根据用途来分为加密密钥和解密密钥)
- 明文: 没有进行加密,能够直接代表原文含义的信息
- 密文:经过加密处理处理之后,隐藏原文含义的信息
- 加密: 将明文转换成密文的实施过程
- 解密:将密文转换成明文的实施过程
数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是有对称算法与公开密钥密码系统系两种(非对称算法),都包含了数据的加密和解密过程.
对称算法:对称密码算法有时又叫传统密码算法,是指加密码密钥可以从解密密钥中推算出来,反过来也成立.
MD5
哈希算法:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制,这个小的二进制称为哈希值.
哈希值是一段数据唯一且及其紧凑的数值表示形式,数据的哈希值可以检验数据的完整性.一般用于快速查找和加密算法.
典型的哈希算法有: MD2, MD4, MD5,和SHA-1等.
MD5: Message Digest Algorithm MD5(消息摘要算法第五版) 为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.
MD5特点:
- 压缩性: 任意长度的数据, 算出的MD5值长度都是固定的(16进制, 32位)
- 容易计算: 从原数据计算出MD5值很容易
- 抗修改性: 对原数据进行任何改动, 哪怕只修改 1个字节 ,所得到的MD5值 都有很大区别.
- 强抗碰撞: 已知原数据和其MD5值,想找到一个具有相同MD5值得数据(即伪数据)是非常难的.
- 小节
- 哈希算法是一种摘要算法,主要作用是用来湖区数据的摘要.严格意义上来说不属于加密算法(因为没有解密过程)
- 获取字符串的MD5比较简单,其他对象可以先转化为NSData对象再进行操作
- 可以根据路径直接获取本地数据,也可以将对象写入文件后获取为NSData对象
- ios同样支持SHA1, base64, AES, 钥匙串,等方式加密数据.
#import "ViewController.h"
// 首先引入框架
#import
@interface ViewController ()
@end
@implementationViewController
- (void)viewDidLoad{
@interface ViewController ()
@end
@implementationViewController
- (void)viewDidLoad{
#pragmamark —————字符串加密
#pragma mark -----------其他对象加密(先转化成NSData)
}
@end
钥匙串加密
- 钥匙串(Keychain):是苹果公司MacOS中的密码管理系统.一个钥匙串可以包含多种类型的数据: 密码(包含网站,FTP服务器,SSH账户, 无线网络, 群组软件,加密磁盘镜像等), 私钥,电子证书和加密笔记.
- 苹果iOS和Mac OSX系统自带了一套敏感信息保存方案:
“钥匙串(Keychain)" - 钥匙串中的条目成为Secltem, 但它是存储在CFDictionary中的.SecltemRef类型并不存在.Secltem有五类: 通用密码, 互联网密码, 证书, 密钥和身份. 在大多数情况下,我们用得到的都是通用密码
- 钥匙串的使用和字典非常的相似
- 用原生的Security.framework 就可以实现钥匙串的访问,读写.但是只能在真机上进行. 通常我们使用KeychainItemWrapper来完成钥匙串的加密.
注:不同页面使用相同的 唯一标识符 也能解析到数据
例子:
过程:
- 拷贝钥匙串类到工程
- 引入头文件
- 生成钥匙串对象
- 存储加密的数据
- 获取钥匙串对象
- 获取加密的数据
#import "ViewController.h"
#import "KeychainItemWrapper.h"
@interfaceViewController()
@end
@implementationViewController
- (void)viewDidLoad{
[ superviewDidLoad];
// 1. 创建钥匙对象
// 参数 1: 表示这个钥匙串对象的标识符
// 参数 2: 分组一般为nil
KeychainItemWrapper *wrapper= [[KeychainItemWrapperalloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil];
// 钥匙串是类似于字典存储的,在存储的时候必须使用系统的两个key值,其他的存不进去
id kUserName= (__bridgeid)kSecAttrAccount;
id kPassWord= (__bridgeid)kSecValueData;
//存入到钥匙串里面
[wrapper setObject:@"123"forKey:kUserName];
[wrapper setObject:@"abc"forKey:kPassWord];
//这里已经保存完成了
#pragma mark 获取钥匙串的数据
KeychainItemWrapper *newWrapper= [[KeychainItemWrapperalloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil];
NSString *userName= [newWrapper objectForKey:kUserName];
NSString *passWord= [newWrapper objectForKey:kPassWord];
NSLog(@"%@%@",userName,passWord);
}
#import "KeychainItemWrapper.h"
@interfaceViewController()
@end
@implementationViewController
- (void)viewDidLoad{
}
@end
RSA公钥加密
#import "ViewController.h"
#import"RSA.h"
@interfaceViewController()
@end
@implementationViewController
- (void)viewDidLoad{
#import"RSA.h"
@interfaceViewController()
@end
@implementationViewController
- (void)viewDidLoad{
}
@end
KVO
KVO(Key-Value-Observer)键值观察者:是观察者设计模式的一种具体实现
KVO激发机制: 一个对象(观察者), 检测另一个对象(被观察者)的某属性是否发生变化,若被检测的属性发生的更改, 会触发观察者的一个方法 (方法名固定, 类似代理方法)
KVO步骤:
- 注册观察者 (为被观察者指定观察者以及被观察的属性)
- 实现回调方法
- 触发回调方法(被观察属性发生更改)
- 移除观察者
KVO以及NotificationCenter通常是用于M和V通信.是实际开发中的必不可少的技能
#import "ViewController.h"
@interfaceViewController()
@property(nonatomic,strong)NSMutableArray *array;
@property(nonatomic,strong)NSMutableArray *array;
@end
@implementation ViewController
-(void)viewDidLoad{
[ superviewDidLoad];
//添加一个观察者
// 参数 1: 被观察着
// 参数 2: 哪一个属性
// 参数 3: 触发方式
// 参数 4: 保险,可以添加些字符串(一般为nil)
[ selfaddObserver:selfforKeyPath:@"array"options:NSKeyValueObservingOptionNew context:nil];//谁去观察谁的哪一个属性,检查它变化的时间
}
- (void)touchesBegan:(NSSet<</span>UITouch*>*)touches withEvent:(UIEvent*)event{
self.array=[NSMutableArrayarray];
NSArray *array= @[@"1",@"2"];
[[ selfmutableArrayValueForKeyPath :@"array"]setArray:array];
}
//触发的方法
- (void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary<</span>NSString*,id>*)change context:(void*)context{
NSLog(@"keyPaht--> %@",keyPath);
NSLog(@"object--> %@",object);
NSLog(@"change--> %@",change);
}
- ( void)dealloc{
//写了KVO一定要写这个移除观察者的方法
[ selfremoveObserver:selfforKeyPath:@"array"];
}
- (void)didReceiveMemoryWarning{
[ superdidReceiveMemoryWarning];
// Dispose of any resources that can berecreated.
}
}
- (void)touchesBegan:(NSSet<</span>UITouch*>*)touches withEvent:(UIEvent*)event{
}
//触发的方法
- (void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary<</span>NSString*,id>*)change context:(void*)context{
}
- (
}
- (void)didReceiveMemoryWarning{
}
@end
0 0
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络安全
- 网络数据解析(2) JSON
- 网络请求(NSURLConnection)
- android pdf 阅读器开发, pdf demo, pdf第三方控件
- 网络请求(NSURLSession)
- 多线程
- 网络安全
- 调用系统相册
- 搜索栏 UISearchController
- Swift (一)
- 类目中添加属性
- 机器学习实战之回归
- Matlab之索引图像转化为灰度图和真彩图
- 知识点1-2
- ABB机器人基础培训资料整理与总结