AES256加密

#import@interface NSData (AES256)

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


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


@end


#import "NSData+AES256.h"

 #import <CommonCrypto/CommonCryptor.h>

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;


}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 3,031评论 0 7
  • 引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在androi...
    freesan44阅读 1,173评论 1 1
  • 今天首尔是阴天,下过阵雨就像是在南方的梅雨季,地面湿湿的,就像是一连下了好几天太阳都没有出来露脸。 来首尔的第六个...
    冬天的雪下不来阅读 297评论 0 0
  • 有一个地方 那里小径凉爽又温柔 那里小草一瓣瓣的绽透 有一个地方 那里初晨的阳光 能温暖我单薄的衣裳 那里细腻的风...
    亦慕阅读 306评论 0 7
  • 下午在读潘向黎的《茶可道》,感觉颇为惊艳,直到《真香无敌》,讲了甚有读者以为她是男的,才知道原来作者是为女子! 也...
    2小阅读 695评论 0 0