AES256加密

#import@interface NSData (AES256)

- (NSData *)AES256EncryptWithKey:(NSString *)key;  //加密


- (NSData *)AES256DecryptWithKey:(NSString *)key;  //解密


@end


#import "NSData+AES256.h"

 #import

static NSString *Key = your key ; //32位

static Byte iv[16]  = your iv;//16位

@implementation NSData (AES256)

    //加密

- (NSData *)AES256EncryptWithKey:(NSString *)key

    {



        key = Key;


        char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

        bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)


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


        NSUInteger dataLength = [self length];


        size_t bufferSize          = dataLength + kCCBlockSizeAES128;

        void* buffer                = malloc(bufferSize);


        size_t numBytesEncrypted    = 0;

        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

                                              keyPtr, kCCKeySizeAES256,

                                              iv /* initialization vector (optional) */,

                                              [self bytes], dataLength, /* input */

                                              buffer, bufferSize, /* output */

                                              &numBytesEncrypted);


        if (cryptStatus == kCCSuccess) {

            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

        }


        free(buffer);

        return nil;

}


    //解密

- (NSData *)AES256DecryptWithKey:(NSString *)key

    {

        key = Key;

        char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

        bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)


        // fetch key data

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


        NSUInteger dataLength = [self length];


        size_t bufferSize          = dataLength + kCCBlockSizeAES128;

        void* buffer                = malloc(bufferSize);


        size_t numBytesDecrypted    = 0;

        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

                                              keyPtr, kCCKeySizeAES256,

                                              iv /* initialization vector (optional) */,

                                              [self bytes], dataLength, /* input */

                                              buffer, bufferSize, /* output */

                                              &numBytesDecrypted);


        if (cryptStatus == kCCSuccess) {

            return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

        }


        free(buffer); //free the buffer;

        return nil;


}

你可能感兴趣的:(AES256加密)