iOS视频、图片下载加密 解密以及保存到本地

注意:此方案没有对文件大小作处理,所以大文件不可使用。(待填坑☹)

所用资源

加密库 RNCryptor
一款自带缓存的AFN二次封装 PPNetworkHelper 参考文章 iOS文件加密-项目中使用

ps:可以先看上面的文章再来看我这篇O(∩_∩)O~

内容下载

使用 PPNetworkHelper的文件下载功能

+ (NSURLSessionDownloadTask *)Download:(NSString *)urlString parameters:(id)parameters progress:(void (^)(NSProgress *downloadProgress)) progressBlock success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure;
复制代码
//由于需要自定义一些配置,所用LYPPNetworkHepler 继承 PPNetworkHelper此类。
+ (NSURLSessionDownloadTask *)Download:(NSString *)urlString parameters:(id)parameters progress:(void (^)(NSProgress *))progressBlock success:(void (^)(id))success failure:(void (^)(NSError *))failure{
	return [LYPPNetworkHepler downloadWithURL:urlString fileDir:@"leejtom" progress:^(NSProgress *progress) {
		LYLog(@"download: %@", progress.localizedDescription);
	} success:^(NSString *filePath) {
		[LYAVPlayerUtils encryptWithFilePath:filePath];
	} failure:^(NSError *error) {
		LYLog(@"%@",error);
	}];
}
复制代码

加密

//加密
+ (void)encryptWithFilePath:(NSString *)filePath{
	dispatch_async(dispatch_get_global_queue(0, 0), ^{
		NSData *avdata = [NSData dataWithContentsOfURL:[NSURL URLWithString:filePath]];
		if (!avdata) {
			LYLog(@"文件不存在");
			return;
		}
		NSError *error;
		NSData *encryptAV = [RNEncryptor encryptData:avdata withSettings:kRNCryptorAES256Settings password:@"123456" error:&error];
		if (error) {
			LYLog(@"encrypt error:%@",error);
		}
		dispatch_async(dispatch_get_main_queue(), ^{
			NSError *error;
			LYLog(@"加密:%d",[encryptAV writeToURL:[NSURL URLWithString:filePath] options:NSDataWritingAtomic error:&error]);
			if (error) {
				LYLog(@"writeToFile error:%@",error);
			}
//			解开注释测试 解密
//			else{
//				[self decryptWithFilePath:filePath];
//			}
		});
		
	});
}

复制代码

##解密

//解密
+ (void)decryptWithFilePath:(NSString *)filePath{
	dispatch_async(dispatch_get_global_queue(0, 0), ^{
		NSData *avdata = [NSData dataWithContentsOfURL:[NSURL URLWithString:filePath]];
		if (!avdata) {
			LYLog(@"文件不存在");
			return;
		}
		NSError *error;
		NSData *encryptAV = [RNDecryptor decryptData:avdata withPassword:@"123456" error:&error];
		if (error) {
			LYLog(@"decrypt error:%@",error);
		}
		dispatch_async(dispatch_get_main_queue(), ^{
			NSError *error;
			LYLog(@"解密: %d",[encryptAV writeToURL:[NSURL URLWithString:filePath] options:NSDataWritingAtomic error:&error]);
			if (error) {
				LYLog(@"writeToFile error:%@",error);
			}
		});
		
	});
}

复制代码

遇到的问题

一开始加密一直失败,断点发现原来是使用dataWithContentsOfFile获取data失败了。改成使用dataWithContentsOfURL 解决这个问题。

  • (nullable instancetype)initWithContentsOfFile:(NSString *)path;
  • (nullable instancetype)initWithContentsOfURL:(NSURL *)url;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值