您的位置:首页 > 其它

AES 加密 应该对大家有用

2016-05-11 18:35 148 查看
#import <CommonCrypto/CommonCryptor.h>

#import "GTMBase64.h"

#define gkey          @"****" //这是  KEY值 大家自己改

#define gIv             @"*****" //这是  KEY值 大家自己改

//@implementation AES_password

+(NSString *)AES128Encrypt:(NSString *)plainText

{

    char keyPtr[kCCKeySizeAES128+1];

    memset(keyPtr, 0, sizeof(keyPtr));

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

    

    char ivPtr[kCCBlockSizeAES128+1];

    memset(ivPtr, 0, sizeof(ivPtr));

    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

    

    NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [data length];

    

    int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);

    int newSize = 0;

    

    if(diff > 0)

    {

        newSize = dataLength + diff;

    }

    

    char dataPtr[newSize];

    memcpy(dataPtr, [data bytes], [data length]);

    for(int i = 0; i < diff; i++)

    {

        dataPtr[i + dataLength] = 0x00;

    }

    

    size_t bufferSize = newSize + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    memset(buffer, 0, bufferSize);

    

    size_t numBytesCrypted = 0;

    

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,

                                          kCCAlgorithmAES128,

                                          0x0000,               //No padding

                                          keyPtr,

                                          kCCKeySizeAES128,

                                          ivPtr,

                                          dataPtr,

                                          sizeof(dataPtr),

                                          buffer,

                                          bufferSize,

                                          &numBytesCrypted);

    

    if (cryptStatus == kCCSuccess) {

        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];

        return [GTMBase64 stringByEncodingData:resultData];

    }

    free(buffer);

    return nil;

}

+(NSString *)AES128Decrypt:(NSString *)encryptText

{

    char keyPtr[kCCKeySizeAES128 + 1];

    memset(keyPtr, 0, sizeof(keyPtr));

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

    

    char ivPtr[kCCBlockSizeAES128 + 1];

    memset(ivPtr, 0, sizeof(ivPtr));

    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

    

    NSData *data = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];

    NSUInteger dataLength = [data length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    

    size_t numBytesCrypted = 0;

    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,

                                          kCCAlgorithmAES128,

                                          0x0000,

                                          keyPtr,

                                          kCCBlockSizeAES128,

                                          ivPtr,

                                          [data bytes],

                                          dataLength,

                                          buffer,

                                          bufferSize,

                                          &numBytesCrypted);

    if (cryptStatus == kCCSuccess) {

        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];

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

    }

    free(buffer);

    return nil;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: