標籤:cimage repr app 受限 strong href color 類型 nsstring
前言:
前段時間,經理突然找我說:能不能在項目中對緩衝的圖片進行加密?當時就感到疑惑,就說:可以是可以,但為什麼要這樣做?有什麼意義沒?
我們都知道,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加密、以及JAVA和iOS中DES加密統一性問題
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)
iOS之關於開發的那點破事(一)