您的位置:首页 > 移动开发 > IOS开发

iOS AES 256加密

2015-12-23 15:58 609 查看
#import <Foundation/Foundation.h>

@class NSString;

@interface NSData (Encryption)

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

@end

#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>

@implementation NSData (Encryption)

- (NSData *)AES256EncryptWithKey:(NSString *)key {//加密
    char keyPtr[kCCKeySizeAES256+1];
    bzero(keyPtr,
sizeof(keyPtr));
    [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 |
kCCOptionECBMode,
                                          keyPtr,
kCCBlockSizeAES128,
                                          NULL,
                                          [self
bytes], dataLength,
                                          buffer, bufferSize,
                                          &numBytesEncrypted);
    if (cryptStatus ==
kCCSuccess) {
        return [NSData
dataWithBytesNoCopy:buffer
length:numBytesEncrypted];
    }
    free(buffer);
    return
nil;
}

- (NSData *)AES256DecryptWithKey:(NSString *)key {//解密
    char keyPtr[kCCKeySizeAES256+1];
    bzero(keyPtr,
sizeof(keyPtr));
    [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 |
kCCOptionECBMode,
                                          keyPtr,
kCCBlockSizeAES128,
                                          NULL,
                                          [self
bytes], dataLength,
                                          buffer, bufferSize,
                                          &numBytesDecrypted);
    if (cryptStatus ==
kCCSuccess) {
        return [NSData
dataWithBytesNoCopy:buffer
length:numBytesDecrypted];
    }
    free(buffer);
    return
nil;
}

@end

//test

    NSString *testString =
@"test";
    NSData *aesData = [SecurityUtil
encryptAESData:testString];
    NSLog(@"AES加密:%@", aesData);
    NSLog(@"AES解密:%@", [SecurityUtil
decryptAESData:aesData]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: