一文件压缩.这里我们需要一个第三方SSZipArchive(需要添加libz.td)
1 #import "ViewController.h"
2 #import "SSZipArchive.h"
3
4 @interface ViewController ()
5
6 @end
7
8 @implementation ViewController
9
10 - (void)viewDidLoad {
11 [super viewDidLoad];
12 // Do any additional setup after loading the view, typically from a nib.
13 //获取沙盒地址
14 NSLog(@"%@",NSHomeDirectory());
15
16
17
18 NSArray * array = @[[[NSBundle mainBundle] pathForResource:@"传输中加密" ofType:@"png"],
19 [[NSBundle mainBundle] pathForResource:@"加密请求头" ofType:@"png"]
20 ];
21 // 根据所有文件的地址压缩文件
22 [SSZipArchive createZipFileAtPath:@"/Users/wxn/Desktop/image.zip" withFilesAtPaths:array];
23
24
25 NSString * path = [[[NSBundle mainBundle] bundlePath]
26 stringByAppendingPathComponent:@"images"];
27
28 NSLog(@"%@",path);
29 //根据目录压缩文件
30 [SSZipArchive createZipFileAtPath:@"/Users/wxn/Desktop/image.zip" withContentsOfDirectory:path];
31
32 }
1 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
2
3 //触屏压缩跟解压
4 [[[NSURLSession sharedSession] downloadTaskWithURL:[NSURL URLWithString:@"http://localhost/image.zip"] completionHandler: ^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
5
6 //unzipFileAtPath 压缩包的路径
7 //toDestination 解压后的路径
8
9 NSString * cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
10
11 [SSZipArchive unzipFileAtPath:location.path toDestination:cachesPath];
12
13
14
15 }] resume];
16 }
二数据加密
1.Base64加密
1、 字符串转化为base64字符串
NSString * string = @"ABC";
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];(字符串转UTF8data)
NSString * base64String = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];(data转字符串)
NSLog(@"%@",base64String);
// 2、加密后的data转化成加密前的字符串
// 将普通的data转化为加密后的data
NSString * string = @"ABC";
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData * base64Data = [data base64EncodedDataWithOptions:0];
//加密后的Data转换为普通data
NSData * data2 = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
NSString * string2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
NSLog(@"%@",string2);
1 UIImage * image = [UIImage imageNamed:@"111"];
2 NSData * data = UIImagePNGRepresentation(image);
3
4 NSString * base64String = [data base64EncodedStringWithOptions:0];
5
6 //解密图片
7 NSData * decodeData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
8 UIImage * decodeImage = [[UIImage alloc] initWithData:decodeData];
9
10 self.imageView.image = decodeImage;
2.MOD加密
‘
MD5同样是需要第三方代码
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护
是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
相比较Base64,原则上MD5是不可逆的,当然市面上有在线破解MD5但是
较复杂的破解时间相对长,因此MD5还是很可靠的
我们可以加盐来增加破译难度。
1 #import "ViewController.h"
2 #import "NSString+Hash.h"
3
4 @interface ViewController ()
5
6 @end
7
8 @implementation ViewController
9
10 - (void)viewDidLoad {
11 [super viewDidLoad];
12 // Do any additional setup after loading the view, typically from a nib.
13
14 NSString * password = @"123";
15
16 NSLog(@"%@",password.md5String);
17
18 //md5加盐
19 NSString * repassword = [password stringByAppendingString:@"vbd,AS.JFLD.ADj"];
20
21 NSLog(@"%@",repassword.md5String);
22 }
23
24 - (void)didReceiveMemoryWarning {
25 [super didReceiveMemoryWarning];
26 // Dispose of any resources that can be recreated.
27 }
3.其他加密方式
国家规定密码不能明文存储
因此常用来密码加密的有MD5+盐
盐选用即时传送的时间
这个是加密请求头
除了MD5还有一个更靠谱的加密方式
iCloud 钥匙串,这是苹果给我们提供的密码保存的解决方案,iOS7之后有的。
存沙盒:
1、如果手机越狱,密码容易被窃取。
2、当软件更新时,沙盒里的内容是不被删除的。但是,如果将软件卸载后重装,沙盒里的数据就没有了。
3、每个APP的沙盒是相对独立的,密码无法共用。
存钥匙串里:
1、苹果提供的安全方案,rsa加密,相对安全。
2、无论软件更新或删除,密码都存在,都可以自动登录。
3、同一公司的APP密码是可以共用的。
钥匙串c语言的
1 #import "ViewController.h"
2 #import "NSString+Hash.h"
3 #import "SSKeychain.h"
4 @interface ViewController ()
5
6 @property (weak, nonatomic) IBOutlet UITextField *usernameTF;
7
8 @property (weak, nonatomic) IBOutlet UITextField *passwordTF;
9
10 @end
11
12 @implementation ViewController
13
14 - (IBAction)login:(id)sender {
15
16 NSString * username = self.usernameTF.text;
17 NSString * password = self.passwordTF.text;
18
19 /**
20 * setPassword 密码
21 Service 服务标识
22 account 用户名
23 */
24
25 #define kLoginService @"loginService"
26
27 [SSKeychain setPassword:password forService:kLoginService account:username error:NULL];
28
29 // NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];
30 //
31 // [ud setObject:username forKey:@"username"];
32 // [ud setObject:password forKey:@"password"];
33 //
34 // [ud synchronize];
35 }
36
37 - (void)viewDidLoad {
38 [super viewDidLoad];
39 // Do any additional setup after loading the view, typically from a nib.
40
41 NSLog(@"%@",NSHomeDirectory());
42
43 //获取所有账户
44 for (id keychain in [SSKeychain allAccounts]) {
45
46 NSLog(@"%@",keychain);
47 }
48
49 // self.usernameTF.text = @"Daquan";
50 //
51 // //通过服务,账号找到密码
52 // self.passwordTF.text = [SSKeychain passwordForService:kLoginService account:@"Daquan" error:NULL];
53
54 //删除钥匙串
55
56 // [SSKeychain deletePasswordForService:kLoginService account:@"Daquan" error:NULL];
57
58
59
60 // NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];
61 //
62 // NSString * username = [ud objectForKey:@"username"];
63 // NSString * password = [ud objectForKey:@"password"];
64 //
65 // if (username&&password) {
66 //
67 // self.usernameTF.text = username;
68 // self.passwordTF.text = password;
69 // }
70
71
72 }
73
74 - (void)didReceiveMemoryWarning {
75 [super didReceiveMemoryWarning];
76 // Dispose of any resources that can be recreated.
77 }
78
79 @end