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;

    }

  • 相关阅读:
    (zt)在PHP中使用全局变量
    (zt)Flash与C++交互
    (zt)关于Flash Socket通信的安全策略问题的一点心得
    (zt)svn 随服务器启动
    使用InstallShield安装和卸载SQL Server数据库(利用sql脚本)
    异常查看部分代码
    VC为控件添加背景
    深入分析MFC文档视图结构
    VC数据库编程概述
    (转)WEB程序打包详解:(连接SQL2005数据库,修改配置文件,建立虚拟目录)
  • 原文地址:https://www.cnblogs.com/jx66/p/8384088.html
Copyright © 2011-2022 走看看