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 個答案
在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
從GitHub添加到你的項目rncryptor源文件。這使OpenSSL加密AES解密文件很容易。(感謝Rob!)https://github.com/rncryptor/rncryptor(蘋果的ccrypt API不好直接與工作)
載入數據和解密:
例如:
@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
如果本站有幫助到您,請不吝於給一個讚鼓勵!