字符串异或

作者: 大刘 | 来源:发表于2022-06-25 21:38 被阅读0次

Created by 大刘 liuxing8807@126.com

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (UTIL)

+ (nonnull NSString *)simpleXor:(nonnull NSString *)info key:(nonnull NSString *)key;

@end

NS_ASSUME_NONNULL_END
#import "NSString+UTIL.h"

@implementation NSString (UTIL)

+ (nonnull NSString *)simpleXor:(nonnull NSString *)info key:(nonnull NSString *)key {
    const char *infoBytes = [info UTF8String];
    const char *keyBytes = [key UTF8String];
    
    int i = 0, j = 0;
    char *bytes = malloc(strlen(infoBytes));
    for (i = 0; i < strlen(infoBytes); i++) {
        bytes[i] = (char) (infoBytes[i] ^ keyBytes[j]);
        
        j++;
        j = j % (key.length);
    }
    
    // 使用strlen(infoBytes), 而不是strlen(bytes)
    // 因为bytes里面有\0,而strlen只计算\0之前数,所以最终的长度偏小
    NSData *data = [NSData dataWithBytes:bytes length:strlen(infoBytes)];
    free(bytes);
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return str;
}

@end
#import <Foundation/Foundation.h>
#import "NSString+UTIL.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        /**
         这就是异或运算⊕的特征:
         0⊕x=x
         1⊕x=x'(x'表示取反)
         x⊕x=0
         所以有:y⊕x⊕x=y
         */
        NSString *str = [NSString simpleXor:@"DALIU" key:@"123456"];
        NSLog(@"%@", str); // us\^?}`
        str = [NSString simpleXor:str key:@"123456"];
        NSLog(@"%@", str); // DALIU
    }
    return 0;
}

相关文章

  • 字符串异或

    - (NSString *)encryptForPlainText:(NSString *)plainText {...

  • 字符串异或

    Created by 大刘 liuxing8807@126.com[mailto:liuxing8807@126....

  • 16进制字符串转化为字节(byte)数组,16进制字符串的异或运

    16进制字符串转化为字节(byte)数组,16进制字符串的异或运算: -(NSString*)generateCR...

  • golang 异或字符串 XOR

    implement useage

  • 前端异或加密算法

    描述 异或加密即对当前字符串每位与约定的key的每位进行异或操作,求出结果,以下代码中最后为了方便传输,对加密后的...

  • 异或

    定义:同为0,异为10^0 01^0 1奇数^1 加-1;偶数^1 加1任何整数^0 不变:abb(可以调换顺序)...

  • 异或

    异或Exclusive or(通常称为“XOR”)是布尔二进制操作符,当第一个输入或第二个输入(但不是两者都是)为...

  • 异或

  • 异或

    异或 题目原链接:https://www.nowcoder.com/practice/fc05f68c5f4743...

  • 异或

    1010异或1111=0101异或运算还可以 是n-1-N 例如 1111-1010 = 0101

网友评论

    本文标题:字符串异或

    本文链接:https://www.haomeiwen.com/subject/vbqwvrtx.html