iOS RC4加解密算法

来源:互联网 发布:系统化思维导论 知乎 编辑:程序博客网 时间:2024/04/28 20:53

-(NSString *)encrypt:(NSString *)string withKey:(NSString *)key{

    self.sBox = [[self frameSBox:key] mutableCopy];

    unichar code[string.length];

    int i = 0;

    int j = 0;

    for (int n = 0; n < string.length; n++) {

        i = (i + 1) % SBOX_LENGTH;

        j = (j + [[self.sBox objectAtIndex:i]integerValue]) % SBOX_LENGTH;

        [self.sBox exchangeObjectAtIndex:i withObjectAtIndex:j];

        NSInteger index=([self.sBox[i] integerValue]+[self.sBox[j] integerValue]);

        NSInteger rand=([self.sBox[(index%SBOX_LENGTH)] integerValue]);

        code[n]=(rand  ^  (int)[string characterAtIndex:n]);

    }

    const unichar* buffer;

    buffer = code;

    return  [NSString stringWithCharacters:buffer length:string.length];

}

- (NSString*) decrypt:(NSString*)string withKey:(NSString*)key

{

    return [self encrypt:string withKey:key];

}

-(NSArray *)frameSBox:(NSString *)keyValue{

    NSMutableArray *sBox = [[NSMutableArray alloc] initWithCapacity:SBOX_LENGTH];

    int j = 0;

    for (int i = 0; i < SBOX_LENGTH; i++) {

        [sBox addObject:[NSNumber numberWithInteger:i]];

    }

    for (int i = 0; i < SBOX_LENGTH; i++) {

        j = (j + [sBox[i] integerValue] + [keyValue characterAtIndex:(i % keyValue.length)]) % SBOX_LENGTH;

        [sBox exchangeObjectAtIndex:i withObjectAtIndex:j];

    }

    return [NSArray arrayWithArray:sBox];

}

 

0 0