iOS之关于开发的那点破事(一)

时间:2021-06-05 12:43:33

前言:

前段时间,经理突然找我说:能不能在项目中对缓存的图片进行加密?当时就感到疑惑,就说:可以是可以,但为什么要这样做?有什么意义没?

我们都知道,apple使用的沙盒(sandbox)机制,这种机制是:在受限的安全环境中运行应用程序的一种做法,而这种做法是要限制授予用用程序的代码访问权限。

所以才有这样的疑问:为什么还要对缓存的图片加密呢?于是经理立马打电话对客户说了原因,觉得没必要再做加密。但得到的回答是:有越狱的手机可以看到。。。。我那个无语啊????。

没办法,那就想办法呗。立马想到的是两种方案:

  (1)网络请求下来的图片网址(imgUrl)手动加密存储。

  (2)修改第三方库(例如:EMAsyncImageView、SDWebImage)。

下面一个个说一下:

1、网络请求下来的图片网址(imgUrl)手动加密存储

大概的代码是这样的:

 UIImage *image = [[UIImage alloc]init]; NSData *imageData = UIImagePNGRepresentation(image); //加密成data类型
    NSData *base64Data = [imageData base64EncodedDataWithOptions:0]; //加密成字符串
    NSString *base64String = [imageData base64EncodedStringWithOptions:0];

然后对data或者base64String 存储到本地就行了。读取时先进行解密,再使用就可以了。

具体的base64加解密可以看Base64加密和DES加密、以及JAVAiOSDES加密统一性问题

2、修改第三方库(例如:EMAsyncImageView、SDWebImage等)

这种方案就比较麻烦了,当然这种麻烦不是说修改比较麻烦,以后的维护也是问题。

2.1、EMAsyncImageView

这个库比较早了,估计除了老的项目,现在使用的就不多了。值得一提的事:这个库并不像SDWebImage一样,它是直接返回的imageView

使用大抵就是这样:

#import "EMAsyncImageView.h" @property (weak, nonatomic)EMAsyncImageView *imageView; imageView.imageUrl = [NSURL URLWithString:imgUrl]; 

2.2、SDWebImage

SDWebImage的使用,现在来说事比较多的,很是受欢迎,也很是简单。

Objective-C: #import <SDWebImage/UIImageView+WebCache.h>//(我使用时添加的头文件:#import "UIImageView+WebCache.h")
 [imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

对于使用就不多说了。我这里说一下思路吧。如果有看过SDWebImage就会知道。这个图也对图片首次加载进行缓存的,缓存后,下次加载就直接从本地读取了,这样做的好处不言而喻。并且为了保证图片的唯一性:SDWebImage的做法是对图片的名字进行加密,以此确保图片的唯一性。

那么现在步入正题:怎样在SDWebImage缓存的图片进行加密呢?其实做法很简单,方法是和手动图片加密一样的。至于关联SDWebImage里面的代码,这点是关键。

但这样做只有弊端是:已有的多个项目修改繁琐、项目维护困难。

 3、iOS--越狱检测

之后是这样回复经理的:这种功能可以实现,但费时费力,也不好维护。这只是一个为了防止越狱手机使用的功能,付出与效果不成正比(毕竟越狱手机占少数)。

但问题还在呢,于是有了另一个想法:对项目进行防越狱。app对手机进行越狱检测:如果是越狱手机,无法安装app

到这里这件破事才算告一段落。。。。。。。????????????????????????????????????

具体的防越狱方法我就不一一列出了,可以看这里,挺详细的:iOS越狱检测总结及代码实现(JailBreak)