zoukankan      html  css  js  c++  java
  • iOSAES加密的实现

    +(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text  //加密

    {

        char keyPtr[kCCKeySizeAES256+1];

        bzero(keyPtr, sizeof(keyPtr));

        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

        NSUInteger dataLength = [text length];

        size_t bufferSize = dataLength + kCCBlockSizeAES128;

        void *buffer = malloc(bufferSize);

        size_t numBytesEncrypted = 0;

        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,

                                              kCCOptionPKCS7Padding | kCCOptionECBMode,

                                              keyPtr, kCCBlockSizeAES128,

                                              NULL,

                                              [text bytes], dataLength,

                                              buffer, bufferSize,

                                              &numBytesEncrypted);

        if (cryptStatus == kCCSuccess) {

            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

        }

        free(buffer);

        return nil;

    }

    + (NSData *)AES256ParmDecryptWithKey:(NSString *)key Decrypttext:(NSData *)text  //解密

    {

        char keyPtr[kCCKeySizeAES256+1];

        bzero(keyPtr, sizeof(keyPtr));

        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

        NSUInteger dataLength = [text length];

        size_t bufferSize = dataLength + kCCBlockSizeAES128;

        void *buffer = malloc(bufferSize);

        size_t numBytesDecrypted = 0;

        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,

                                              kCCOptionPKCS7Padding | kCCOptionECBMode,

                                              keyPtr, kCCBlockSizeAES128,

                                              NULL,

                                              [text bytes], dataLength,

                                              buffer, bufferSize,

                                              &numBytesDecrypted);

        if (cryptStatus == kCCSuccess) {

            return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

        }

        free(buffer);

        return nil;

    }

    +(NSString *) aes256_encrypt:(NSString *)key Encrypttext:(NSString *)text

    {

        const char *cstr = [text cStringUsingEncoding:NSUTF8StringEncoding];

        NSData *data = [NSData dataWithBytes:cstr length:text.length];

        //对数据进行加密

        NSData *result = [LanAES AES256ParmEncryptWithKey:key Encrypttext:data];

        

        //转换为2进制字符串

        if (result && result.length > 0) {

            

            Byte *datas = (Byte*)[result bytes];

            NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2];

            for(int i = 0; i < result.length; i++){

                [output appendFormat:@"%02x", datas[i]];

            }

            return output;

        }

        return nil;

    }

    +(NSString *) aes256_decrypt:(NSString *)key Decrypttext:(NSString *)text

    {

        //转换为2进制Data

        NSMutableData *data = [NSMutableData dataWithCapacity:text.length / 2];

        unsigned char whole_byte;

        char byte_chars[3] = {'','',''};

        int i;

        for (i=0; i < [text length] / 2; i++) {

            byte_chars[0] = [text characterAtIndex:i*2];

            byte_chars[1] = [text characterAtIndex:i*2+1];

            whole_byte = strtol(byte_chars, NULL, 16);

            [data appendBytes:&whole_byte length:1];

        }

        

        //对数据进行解密

        NSData* result = [LanAES  AES256ParmDecryptWithKey:key Decrypttext:data];

        if (result && result.length > 0) {

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

        }

        return nil;

    }

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/jx66/p/8384088.html
Copyright © 2011-2022 走看看