解决方法
该答案提到,应用程序在加载到用户的设备上时已经被加密:
Does Apple modify iOS application executables on apps submitted to the App Store?
对不起,这只是应用程序的二进制文件.其他媒体没有加密,不,没有办法加密.ipa.您可以尝试加密您的系统上的图像和其他媒体,提供一堆应用程序代码来在应用程序运行时解密这些资源,然后您的解密代码将成为加密应用程序二进制文件的一部分.您不能提交加密的IPA,但它需要是从Xcode直接输出的文件.
为了回应你的评论,我使用的是CommonCrypto.您需要#import< CommonCrypto / CommonCryptor.h>,我用作我的起点的实现是this category on NSMutableData.
以上类别的简单使用示例:
NSMutableData *imageData = [NSMutableData dataWithContentsOfFile:pathToEncryptedFile]; [imageData decryptWithKey:@"SuperSecretDecryptionKey"]; UIImage *decryptedImage = [UIImage imageWithData:imageData];
重要的注意事项:如果有人要在你的.app上运行字符串实用程序,在越狱的iPhone上,甚至在iPhone上,他们可以通过USB进行文件系统访问,他们将获得在您的应用程序中声明的所有字符串的列表.这包括“SuperSecretDecryptionKey”.所以你可能想使用一个整数,浮点或其他常量做一个字符串解密密钥的即时生成,或者确保你用来解密事物的字符串与普通系统字符串完全相同,所以没有人怀疑它是真正的关键.在这种情况下,通过晦涩的安全是有利的.
更新:你应该检查这个东西AQToolkit
,这是相当全面的.
要加密/解密* .strings文件,您应该以某种方式加密密钥和值字符串(可能是给您十六进制的字符或任何字母数字字符),当您想要访问给定的值时,请执行LicenceNumber,执行此操作:
NSMutableData *keyToRequest = [@"LicenceNumber" dataUsingEncoding:NSUTF8StringEncoding]; [keyToRequest encryptWithKey:@"SuperSecretEncryptionKey"]; NSMutableData *valueToRequest = [[NSBundle mainBundle] localizedStringForKey:[NSString stringWithUTF8String:[keyToRequest bytes]] value:@"No licence" table:@"EncryptedStringsFile"]; [valueToRequest decryptWithKey:@"SuperSecretDecryptionKey"];