场景
iOS逆向静态分析,字符串的硬编码比较容易成为逆向者的突破口。因此有必要做一些字符串硬编码的混淆,如加密的对称加密key,md5的key,域名,接口名等。
方法
利用位运算方式 编译换算成结果 ,不会进入字符串常量区
代码事例: 原始字符串: IUIDISTP#
#define STRING_ENCRYPT_KEY 0xAC
static NSString * AES_KEY(){
unsigned char key[] = {
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'U'),
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'D'),
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'S'),
(STRING_ENCRYPT_KEY ^ 'T'),
(STRING_ENCRYPT_KEY ^ 'P'),
(STRING_ENCRYPT_KEY ^ '#'),
(STRING_ENCRYPT_KEY ^ '\0')
};
unsigned char * p = key;
while (((*p) ^= STRING_ENCRYPT_KEY) != '\0') p++;
return [NSString stringWithUTF8String:(const char *)key];
}
应用
NSString * str = [[EncryptionTools sharedEncryptionTools] encryptString:@"some message want to encrypted" keyString:AES_KEY() iv:nil];
总结
此方法应用于敏感字符串手动加密场景