zoukankan      html  css  js  c++  java
  • XOR 加密

    XOR运算

    XOR运算,中文称为“异或运算”。

    它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

    对应的真值表如下:

    输入
    A B
    输出
    A XOR B
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    XOR 应用

    XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。

    // 第一次 XOR
    1010 ^ 1111 // 0101
    
    // 第二次 XOR
    0101 ^ 1111 // 1010
    

    加密数据

    iOS加密数据如下:

    循环遍历数据中的每一个字节,每个字节对应的数据与加密key对应的值做异或运算,然后把异或后的数据与原数据做交换。

    -(NSString *)obfuscate:(NSString *)string withKey:(NSString *)key
    {
        
        NSData* bytes = [string dataUsingEncoding:NSUTF8StringEncoding];
        
        Byte  *myByte = (Byte *)[bytes bytes];
        
        NSData* keyBytes = [key dataUsingEncoding:NSUTF8StringEncoding];
        
        Byte  *keyByte = (Byte *)[keyBytes bytes];
        
        int keyIndex = 0;
        
        for (int x = 0; x < [bytes length]; x++)
        {
            myByte[x]  = myByte[x] ^ keyByte[keyIndex];
                                       
            if (++keyIndex == [keyBytes length])
                {
                    keyIndex = 0;
                }
        }
    
    
    //可以直接返回NSData
        NSData *newData = [[NSData alloc] initWithBytes:myByte length:[bytes length]];
        NSString *aString = [[NSString alloc] initWithData:newData encoding:NSUTF8StringEncoding];
    
        return aString;
        
    }

    参考

  • 相关阅读:
    阅读笔记2
    阅读笔记1
    学习进度条
    第二阶段冲刺第七天站立会议
    第二阶段冲刺第六天站立会议
    第二阶段冲刺第五天站立会议
    阅读笔记4
    第二阶段冲刺第四天站立会议
    第一阶段意见评论
    第12周学习进度总结
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/11445702.html
Copyright © 2011-2022 走看看