1. 程式人生 > >ios開發 圖片資源的簡單加密(一)

ios開發 圖片資源的簡單加密(一)

實現最簡單的圖片加密和解密

注意:使用加密圖片,勢必會影響app的效能

整體思路:

生成加密檔案:在mac端

1.將image.png的檔案轉成NSData

2.把NSData檔案與密碼檔案sn(NSData)拼接

3.把拼接好的NSData檔案儲存為以image.data為名字的資料檔案.

解析加密檔案:在mac或ios端

1.獲取密碼檔案sn

2.讀取image.data,轉成NSData

3.刪除NSData中的密碼檔案sn的內容

4.儲存或使用刪除密碼檔案後的NSData


程式碼詳情:

生成加密檔案image.data

 //檔案管理器
    NSFileManager *manager = [NSFileManager defaultManager];
    //獲取沙盒內各檔案的名稱   陣列中存的全是字串      中文路徑需要轉碼
#warning ---TODO 中文路徑需要轉碼
    //獲取資料夾中所有圖片名
    NSArray *array = [manager contentsOfDirectoryAtPath:self.importLabel.stringValue error:nil];
    
    for (int i = 0; i < array.count; i ++) {
        //生成密碼檔案
        NSMutableData *sn1 = [self.snLabel.stringValue dataUsingEncoding:NSUTF8StringEncoding];
        NSString *docName = array[i];   //各圖片名
        NSString *importPath = [NSString stringWithFormat:@"%@/%@",self.importLabel.stringValue,docName ];
        NSMutableData *imageData = [NSMutableData dataWithContentsOfFile: importPath];
        //將密碼與圖片檔案拼接
        [sn1 appendData: imageData];
        //儲存路徑
        NSString *savePath = [self getSavePath:docName];
        //寫入
        [sn1 writeToFile:savePath atomically:YES];
    }


解析image.data

寫成UIImage的一個分類,方便獲取圖片

/**
 *  從加密圖片獲取圖片
 *
 *  @param imageName 圖片名字
 *
 *  @return 圖片
 */
+(UIImage*)imageInSnWithName:(NSString*)imageName{
    //獲取加密檔案路徑
    NSString *imDataStr = [[NSBundle mainBundle] pathForResource:imageName ofType:nil];
    //加密檔案轉成NSData
    NSData *imageData = [NSData dataWithContentsOfFile: imDataStr ];
    //密碼檔案
    NSData *sn = [ SN dataUsingEncoding:NSUTF8StringEncoding];
    
    NSUInteger pre = sn.length;
    NSUInteger total = imageData.length;
    NSRange range = {pre , total-pre};
    //除去加密檔案
    NSData *imData = [imageData subdataWithRange:range];
    //生成可使用的圖片資源
    UIImage *image = [[UIImage alloc]initWithData:imData];
    
    return image;
}


原始碼下載:

ps : ios端原始碼中的加密圖片密碼為  123