Ios: 如何保護iOS束文件屬性列表,圖像,SQLite,媒體文件

我創建了Hello World示例項目,然後添加data.plist文件到資源文件夾。現在人們可以很容易得到束文件解壓縮。國際音標。有任何的方法來保護data.plist文件保存在iPhone應用程序包?

Encryption is a decent method of scrambling the data but i don't know how to implement encription concept.

你有什麼樣的代碼?

在這裡輸入圖像描述

   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
NSArray *arrData = [[NSArray alloc]initWithContentsOfFile:filePath];

NSData *datas = [NSKeyedArchiver archivedDataWithRootObject:arrData];
[datas writeToFile:filePath atomically:YES];

提取後的IPA文件

在這裡輸入圖像描述

iosiphonebundleprotection

這個問題有 2 個解答。

1 個答案

使用nskeyedarchiver要從你的字典中創建一個NSData對象(nskeyedarchiver archiveddatawithrootobject:)。然後用AES加密NSData寫,你的文件。

閱讀只是相反的過程:首先,閱讀NSData,解密它通過從上述的連接方法,然後通過解密NSData到nskeyedunarchiver(nskeyedunarchiver unarchiveobjectwithdata:)你把你的字典回來。你可以使用NSDictionary plist文件或保持你的數據安全。

實例1:

實例2:

編輯2:

NSDictionary *Your_NSDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Obj1", @"Key1",@"Obj2", @"Key2", nil];//store dictionaryNSMutableData *yourData = [[NSMutableData alloc] init];NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];[archiver encodeObject:Your_NSDictionary forKey: @"key"];[archiver finishEncoding];[yourData writeToFile:@"FilePath" atomically:YES];

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];NSDictionary* data = [NSDictionary dictionaryWithContentsOfFile:filePath];NSMutableDictionary * rootObject;rootObject = [NSMutableDictionary dictionary];[rootObject setValue: data forKey:@"accounts"];[NSKeyedArchiver archiveRootObject: rootObject toFile: path];

2 個答案

  1. 在MAC加密文件…在部署:

    第一:要加密的目標不添加文件
    例如:Encryption-Test.plist

    然後添加一個shell腳本相Xcode項目使用openssl加密和複製文件。
    例如:
    openssl enc -e -aes-256-cbc -pass pass:asdasd-in $PROJECT_DIR/test/Encryption-Test.plist -out $TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/Encryption-Test.enc

  2. 從GitHub添加到你的項目rncryptor源文件。這使OpenSSL加密AES解密文件很容易。(感謝Rob!)https://github.com/rncryptor/rncryptor(蘋果的ccrypt API不好直接與工作)

  3. 載入數據和解密:

例如:

@implementation TestViewController- (void)viewDidLoad{[super viewDidLoad];NSString *path = [[NSBundle mainBundle] pathForResource:@"Encryption-Test" ofType:@"enc"];NSData *passEncryptedData =[[NSData alloc] initWithContentsOfFile:path];NSString *pass = @"asdasd";NSData *dataDecrypted = [RNOpenSSLDecryptor decryptData:passEncryptedData withSettings:kRNCryptorAES256Settings password:pass error:nil];id plist = [NSPropertyListSerialization propertyListFromData:dataDecrypted mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil];assert(plist);self.text.text = [plist description];}@end


增加了全樣本:https://github.com/daij-djan/encryptbundlefiles

如果本站有幫助到您,請不吝於給一個讚鼓勵!