ios - 混淆数字(字符串) objective-c

标签 ios objective-c encryption obfuscation

我正在使用以下代码来混淆我的测试应用程序的密码。

    - (NSString *)obfuscate:(NSString *)string withKey:(NSString *)key
{
    // Create data object from the string
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    // Get pointer to data to obfuscate
    char *dataPtr = (char *) [data bytes];

    // Get pointer to key data
    char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];

    // Points to each char in sequence in the key
    char *keyPtr = keyData;
    int keyIndex = 0;

    // For each character in data, xor with current value in key
    for (int x = 0; x < [data length]; x++)
    {
        // Replace current character in data with
        // current character xor'd with current key value.
        // Bump each pointer to the next character
        *dataPtr = *dataPtr++ ^ *keyPtr++;

        // If at end of key data, reset count and
        // set key pointer back to start of key value
        if (++keyIndex == [key length])
            keyIndex = 0, keyPtr = keyData;
    }

    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

这对于所有字符串来说都像是一种魅力,但是比较以下结果时我遇到了一个问题
NSLog([[self obfuscate:@"0000", @"maki"]); //Returns 0]<W

NSLog([[self obfuscate:@"0809", @"maki"]); //Returns 0]<W

如您所见,两个数字不同的字符串返回相同的结果!我附加的代码出了什么问题,导致这两个数字的结果相同?

另一个例子:
NSLog([self obfuscate:@"8000" withKey:@"maki"]); //Returns 8U4_
NSLog([self obfuscate:@"8290" withKey:@"maki"]); //Returns 8U4_ as well

我可能会误解混淆的概念,但是我的印象是每个唯一的字符串都返回一个唯一的混淆字符串!

请帮助我修复此错误/故障
代码源:http://iosdevelopertips.com/cocoa/obfuscation-encryption-of-string-nsstring.html

最佳答案

问题是您的最后一行。您使用未经修改的原始data对象创建新字符串。

您需要根据修改后的NSData字节创建一个新的dataPtr对象。

NSData *newData = [NSData dataWithBytes:dataPtr length:data.length];
return [[NSString alloc] initWithData:newData encoding:NSUTF8StringEncoding];

但是,您还有一些更大的问题。
  • bytes的调用返回一个对NSData对象中字节的恒定只读引用。您不应该修改该数据。
  • 从理论上讲,对字符数据进行XOR的结果可能会导致字节流不再是有效的UTF-8编码的字符串。
  • 关于ios - 混淆数字(字符串) objective-c ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283282/

    相关文章:

    iOS:核心数据 performBlock 使 UI 无响应

    iOS HealthKit 在 session 期间跟踪用户步数

    ios - 图像选择器在模拟器上崩溃

    iphone - 如何修改 GLCameraRipple 示例以在后台线程上处理?

    ios - NSLog matrix_float4x4 或 simd::float4x4

    iOS Afnetworking 2.0 AfSecurityPolicy.m 在构建项目时显示错误

    java - 如何将 Diffie-Hellman 类生成的 AES key 添加到我使用该 key 的类中

    php - 使用从密码派生的 key 加密文件...如果用户忘记密码怎么办

    java - 不同平台中相同的哈希+加密生成不同的值

    ios - UITableView 问题(iOS)