//
// main.m
// AES加密
//
// Created by dc008 on 16/1/5.
// Copyright © 2016年 lin. All rights reserved.
//
// AES和MD5相对比base64安全性更高
#import <Foundation/Foundation.h>
#import "NSData+AES.h"
int main() {
NSString *key = @"99";//钥匙
NSString *secret = @"加密内容";//准备加密的内容
//加密- (NSData *)AES256EncryptWithKey:(NSString *)key
NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];
NSLog(@"加密后:%@",cipher);
NSString *result = [[NSString alloc]initWithData:cipher encoding:NSUTF8StringEncoding];
NSLog(@"[[[[[%@",result);
//解密- (NSData *)AES256DecryptWithKey:(NSString *)key
for (int i = 1; i <= 100; i++) {
plain = [cipher AES256DecryptWithKey:[NSString stringWithFormat:@"%d",i]];
result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];
if (result != NULL) {
NSLog(@"%d",i);
NSLog(@"解密后: %@",result);
}
}
// plain = [cipher AES256DecryptWithKey:key];
// result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];
// NSLog(@"解密后: %@",result);
return 0;
}
//
// NSData+AES.h
// oc aes
//
// Created by 朱毅成 on 16/1/4.
// Copyright © 2016年 朱毅成. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSData(AES)
- (NSData *)AES256EncryptWithKey:(NSString *)key; //加密
- (NSData *)AES256DecryptWithKey:(NSString *)key; //解密
@end
//
// NSData+AES.m
// oc aes
//
// Created by 朱毅成 on 16/1/4.
// Copyright © 2016年 朱毅成. All rights reserved.
//
#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>
@implementation NSData(AES)
- (NSData*)AES256EncryptWithKey:(NSString*)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,
NULL /* 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 {
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,
NULL /* 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;
}
@end