牛骨文教育服务平台(让学习变的简单)
博文笔记

iOS 安卓 服务器后台 公用的简单加密和解密

创建时间:2017-05-26 投稿人: 浏览次数:136

#pragma mark 加密字符串

encryption 加密结果

decoding   解密结果

+ (NSString *)encryptForPlainText:(NSString *)plainText

{

    //保存加密后的字符

    NSMutableString *encryption=[NSMutableStringstring];

    //编码转换后的字符串 UTF_8->iso-8859-1

    NSString *encoding=[[NSStringalloc]initWithData:[plainTextdataUsingEncoding:NSUTF8StringEncoding]encoding:NSISOLatin1StringEncoding];

    

    for(int i=0,j=0;i<encoding.length;i++,j++){

        if(j==SECRETKEY.length){

            j=0;

        }

        //异或后的字符

        char cipher=(char)([encodingcharacterAtIndex:i]^[SECRETKEYcharacterAtIndex:j]);

        //NSLog(@"%c转成16进制的字符串:%@,%@",cipher,[NSString stringWithFormat:@"%hhx",cipher],[NSString stringWithFormat:@"%x",cipher&0xff]);

        //转成16进制形式的字符串 x8b转成8b字符串

        NSString *strCipher= [NSStringstringWithFormat:@"%hhx",cipher];

        if(strCipher.length ==1){

            [encryption appendFormat:@"0%@",strCipher];

        }else{

            [encryption appendString:strCipher];

        }

    }

    return encryption;

}


#pragma mark 解密如果不为加密字符则返回原字符


+ (NSString *)decryptForEncryption:(NSString *)encryption {

    //保存解密后的字符

    NSMutableString *decryption=[NSMutableStringstring];

    //解码字符

    NSString *decoding=nil;

    

    for(int i=0,j=0;i<encryption.length/2;i++,j++){

        if(j==SECRETKEY.length){

            j=0;

        }

        //截取16进制形式的字符串 x8b中的8b

        NSString *tem=[encryptionsubstringWithRange:NSMakeRange(i*2,2)];

        char *endptr;

        //16进制形式的字符串转为字符

        char n=(char)(int)strtoul([temUTF8String],&endptr,16);

        //判断是否为加密字符

        if (n==""&&*endptr!="") {

            [decryption setString:@""];

            break;

        }

        [decryption appendFormat:@"%c",(char)(n^[SECRETKEYcharacterAtIndex:j])];

    }

    if (![decryptionisEqualToString:@""]) {

        //编码后的字符串 iso-8859-1 -> UTF_8

        decoding=[[NSStringalloc]initWithData:[[decryptioncopy] dataUsingEncoding:NSISOLatin1StringEncoding]encoding:NSUTF8StringEncoding];

    }

    if (decoding==nil) {

        decoding=encryption;

    }

    return decoding;

}


SECRETKEY为一个宏定义 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。