zoukankan      html  css  js  c++  java
  • iOS 抑或算法总结(XOR)

    方法1:

    // 加密

    -(NSString *)obfuscate:(NSData *)string withKey:(NSString *)key

    {

         NSData *data = string;

         char *dataPtr = (char *) [data bytes];

       char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];

         char *keyPtr = keyData;

         int keyIndex = 0;

         for (int x = 0; x < [data length]; x++){

          *dataPtr = *dataPtr++ ^ *keyPtr++;

              if (++keyIndex == [key length]) keyIndex = 0, keyPtr = keyData;

    }

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

    }

    //解密

     -(NSString*)encodeString:(NSString*)data :(NSString*)key

    {

        NSString *result=[NSString string];

        for(int i=0; i < [data length]; i++){

            int chData = [data characterAtIndex:i];

            for(int j=0;j<[key length];j++){

                int chKey = [key characterAtIndex:j];

                chData = chData^chKey;

            }

            result=[NSString stringWithFormat:@"%@%@",result,[NSString stringWithFormat:@"%c",chData]];

        }

        return result;

    }

    方法2:

    // 客户端内置私钥
    static NSString const *privateKey = @"jwef37c9111210854f5986fc9ebb5548b2ae";
    
    // 加密
    - (NSData *)xor_encrypt
    {
        // 获取key的长度
        NSInteger length = privateKey.length;
        // 将OC字符串转换为C字符串
        const char *keys = [privateKey cStringUsingEncoding:NSASCIIStringEncoding];
        unsigned char cKey[length];
        memcpy(cKey, keys, length);
        // 数据初始化,空间未分配 配合使用 appendBytes
        NSMutableData *encryptData = [[NSMutableData alloc] initWithCapacity:length];
        // 获取字节指针
        const Byte *point = self.bytes;
        for (int i = 0; i < self.length; i++) {
            int l = i % length;                     // 算出当前位置字节,要和密钥的异或运算的密钥字节
            char c = cKey[l];
            Byte b = (Byte) ((point[i]) ^ c);       // 异或运算
            [encryptData appendBytes:&b length:1];  // 追加字节
        }
        return encryptData.copy;
    }
    @end

    // 解密
    - (NSData *)xor_decrypt
    {
        return [self xor_encrypt];
    }
  • 相关阅读:
    杭电 1548 A strange lift(广搜)
    JAVA数组的定义及用法
    WPF之Binding深入探讨
    FBReaderJ源代码编译配置
    【剑指offer】合并两有序单链表
    对HGE游戏引擎的一次封装
    WAV文件格式分析
    Ubuntu9.04更新源
    内核及内核模块
    java实现第七届蓝桥杯愤怒小鸟
  • 原文地址:https://www.cnblogs.com/akiha/p/6507068.html
Copyright © 2011-2022 走看看